代码之家  ›  专栏  ›  技术社区  ›  jordinl

在宝石的rake任务中需要宝石

  •  6
  • jordinl  · 技术社区  · 14 年前

    我正在使用Jeweller为Rails 3创建一个gem。gem包含一个rake任务,它所做的一件事就是擦除db,所以我使用的是“数据库清理器”。

    我在指定gem的gem文件中的gem依赖关系

    gem 'database_cleaner'
    

    在拉克尔河

    Jeweler::Tasks.new do |gem|
      ...
      gem.add_dependency 'database_cleaner'
    end
    

    然后在lib中,我创建了我的gem.rb和tasks.rake文件。如下所示,我的“gem.rb:

    module MyGem
      class Railtie < Rails::Railtie
        rake_tasks do
          load 'tasks.rake'
        end
      end
    end
    

    和Task.Rake:

    task :my_task do
      DatabaseCleaner.strategy = :truncation
      DatabaseCleaner.clean
    end
    

    我安装了gem(sudo rake install),创建了一个空的rails项目,并在rails的gemspec中添加了gem依赖项。( gem 'my_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“数据库清洗器” 去铁路项目的gemspec?

    谢谢

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   johnmcaliley    14 年前

    以下是我所做的工作:

    https://github.com/johnmcaliley/dummy_tasks/commits/master

    塔克斯

    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
    

    可能有一种更优雅的方法来完成这项工作,但这至少可以防止您不得不将数据库清理器gem添加到app gemfile中。