2010-11-15 70 views
6

我正在使用珠宝商为Rails 3创建一块宝石。宝石包含一个耙子任务,它所做的一件事是擦拭数据库,所以我使用'database_cleaner' 。在宝石的耙子任务中需要一块宝石

我指定的创业板公司的Gemfile

gem 'database_cleaner' 

内部和Rake文件

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 

我安装了宝石(须藤耙安装),创建了一个空轨项目,并在轨道添加的宝石依赖Gemspec(gem 'my_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.

有没有办法解决这个问题,而无需将gem 'database_cleaner'添加到rails项目的Gemspec?

感谢

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

+0

您可以从gem发布mygem.gemspec并从空发布Gemfile.lock rails应用程序? – johnmcaliley 2010-11-15 19:02:50

+0

嘿!我已添加链接到github回购。谢谢! – jordinl 2010-11-15 19:10:08

回答

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

+0

非常感谢很多人! – jordinl 2010-11-15 21:49:58

+2

现在链接是404。你能否详细说明一下:你在这里做了什么,为什么? – amoebe 2014-01-31 13:47:22