在宝石的耙子任务中需要一颗宝石

我正在使用珠宝商为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_cleanergem '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

上一篇: Requiring a gem inside a gem's rake task

下一篇: Rails 4 model is valid, but won't save?