在宝石的耙子任务中需要一颗宝石
我正在使用珠宝商为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
和gem 'database_cleaner'
会引发错误database_cleaner is not part of the bundle. Add it to Gemfile.
database_cleaner is not part of the bundle. Add it to Gemfile.
。
有没有办法解决这个问题,不添加方式gem 'database_cleaner'
到轨项目的Gemspec?
谢谢
更新(添加链接到源代码):https://github.com/jordinl/dummy_tasks
以下是我做的工作:
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
链接地址: http://www.djcxy.com/p/81127.html