在宝石的耙子任务中需要一颗宝石
我正在使用珠宝商为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