gpt4 book ai didi

ruby-on-rails - 在 gem 的 rake 任务中需要 gem

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:40 26 4
gpt4 key购买 nike

我正在使用 jeweler 为 Rails 3 创建一个 gem。该 gem 包含一个 rake 任务,它所做的其中一件事是删除数据库,所以我正在使用“database_cleaner”。

我在 gem 的 Gemfile 中指定 gem 依赖项

gem 'database_cleaner'

在 Rakefile 中

Jeweler::Tasks.new do |gem|
...
gem.add_dependency 'database_cleaner'
end

然后在 lib 中我创建了文件 my_gem.rb 和 tasks.rake。如下,my_gem.rb:

module MyGem
class Railtie < Rails::Railtie
rake_tasks do
load 'tasks.rake'
end
end
end

和 tasks.rake:

task :my_task do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
end

我安装了 gem (sudo rake install),创建了一个空的 rails 项目并在 rails 的 Gemspec (gem 'my_gem') 中添加了 gem 依赖项。但是,当我尝试运行 rake my_task 时,出现错误 uninitialized constant DatabaseCleaner

我还尝试从任务内部添加 require 'database_cleaner',这会引发错误 no such file to load -- database_cleaner and gem '引发错误的 database_cleaner' database_cleaner 不是包的一部分。将其添加到 Gemfile。

有没有办法在不将 gem 'database_cleaner' 添加到 rails 项目的 Gemspec 的情况下解决这个问题?

谢谢

更新(添加源代码链接): https://github.com/jordinl/dummy_tasks

最佳答案

以下是我为使其工作所做的工作:

任务.rake

require 'database_cleaner'
require 'dummy_tasks'

namespace :db do
task :dummy => :environment do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
Rake::Task['db:seed'].invoke
end
end

可能有更优雅的方法来做到这一点,但这至少应该避免您必须将 database_cleaner gem 添加到应用程序 Gemfile

关于ruby-on-rails - 在 gem 的 rake 任务中需要 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com