Требование драгоценного камня в задаче грабли драгоценного камня - PullRequest
6 голосов
/ 15 ноября 2010

Я использую jeweler для создания гема для Rails 3. Драгоценный камень содержит задачу rake, и одна из вещей, которую он делает, это стирание БД, поэтому я использую 'database_cleaner'.

Я указываю зависимость от самоцвета в Gemfile самоцвета

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

И задачи. Грабли:

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

Я установил gem (sudo rake install), создал пустой проект rails и добавил зависимость gem в Gemspec для rails (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 'database_cleaner' в Gemspec проекта rails?

Спасибо

ОБНОВЛЕНИЕ (добавление ссылки на исходный код): https://github.com/jordinl/dummy_tasks

1 Ответ

3 голосов
/ 15 ноября 2010

Вот что я сделал, чтобы заставить его работать:

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 в приложение Gemfile

...