2010-11-15 19 views
6

Estoy usando joyero para crear una gema para Rails 3. La gema contiene una tarea de rastrillo y una de las cosas que hace es limpiar la base de datos, entonces estoy usando 'database_cleaner' .Exigir una gema dentro de la tarea de rastrillo de una gema

estoy especificando la dependencia joya en el interior de la gema Gemfile

gem 'database_cleaner' 

Y en el Rakefile

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

A continuación, en el interior lib He creado los archivos my_gem.rb y tasks.rake. En la siguiente manera, my_gem.rb:

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

Y tasks.rake:

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

He instalado la gema (rake sudo instalar), un proyecto creado carriles de vacío y se añade la dependencia joya en los rieles Gemspec (gem 'my_gem'). Pero cuando intento ejecutar rake my_task obtengo el error uninitialized constant DatabaseCleaner.

También he intentado añadir require 'database_cleaner' desde el interior de la tarea, lo que eleva el error no such file to load -- database_cleaner y gem 'database_cleaner' que eleva el error database_cleaner is not part of the bundle. Add it to Gemfile..

¿Hay alguna manera de resolver esto sin agregar gem 'database_cleaner' al Gemspec del proyecto de rieles?

Gracias

ACTUALIZACIÓN (añadiendo el enlace al código fuente): https://github.com/jordinl/dummy_tasks

+0

puedes publicar mygem.gemspec desde la gema y Gemfile.lock desde la vacía aplicación carriles? – johnmcaliley

+0

hey! He agregado el enlace al repositorio de github. ¡Gracias! – jordinl

Respuesta

3

Esto es lo que hice para hacer que funcione:

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 

Puede haber una manera más elegante de hacer esto, pero esto debería al menos evitar que tengas que agregar la gema database_cleaner a la aplicación Gemfile

+0

muchas gracias hombre! – jordinl

+2

El enlace es 404 ahora. ¿Podrían explicarnos mejor qué hicieron exactamente aquí y por qué? – amoebe

Cuestiones relacionadas