我正在使用珠宝商为Rails 3创建一个宝石。宝石包含一个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
和gem 'database_cleaner'
,从而引发错误database_cleaner is not part of the bundle. Add it to Gemfile.
。
有没有办法解决这个问题而不将gem 'database_cleaner'
添加到rails项目的Gemspec中?
由于
更新(添加源代码的链接): https://github.com/jordinl/dummy_tasks
答案 0 :(得分:3)
以下是我的工作:
https://github.com/johnmcaliley/dummy_tasks/commits/master
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