2010-11-15 17 views
6

Sto utilizzando gioielliere per creare un gioiello per Rails 3. La gemma contiene un'attività rake e una delle cose che fa è cancellare il DB, quindi sto usando 'database_cleaner' .Richiesta di una gemma all'interno di un'attività gemma

sto specificando la dipendenza gemma all'interno della gemma Gemfile

gem 'database_cleaner' 

E nel Rakefile

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

Poi dentro lib Ho creato i file my_gem.rb e tasks.rake. Come segue, my_gem.rb:

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

E tasks.rake:

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

Ho installato la gemma (sudo rake install), creato un progetto rotaie vuoto e ha aggiunto la dipendenza gemma nelle rotaie Gemspec (gem 'my_gem'). Ma quando provo a eseguire rake my_task ottengo l'errore uninitialized constant DatabaseCleaner.

Ho anche provato ad aggiungere require 'database_cleaner' dall'interno del compito, che genera l'errore no such file to load -- database_cleaner e gem 'database_cleaner' che genera l'errore database_cleaner is not part of the bundle. Add it to Gemfile..

C'è un modo per risolvere questo senza aggiungere gem 'database_cleaner' al Gemspec del progetto rotaie?

Grazie

UPDATE (aggiungendo il link al codice sorgente): https://github.com/jordinl/dummy_tasks

+0

puoi postare mygem.gemspec dalla gemma e il Gemfile.lock dal vuoto app per rails? – johnmcaliley

+0

hey! Ho aggiunto il link al repository github. Grazie! – jordinl

risposta

3

Ecco che cosa ho fatto per farlo funzionare:

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 

Potrebbe esserci un modo più elegante per farlo, ma questo dovrebbe almeno impedire di aggiungere la gem di database_cleaner all'app Gemfile

+0

grazie mille amico! – jordinl

+2

Il link ora è 404. Potresti per favore elaborare: cosa hai fatto esattamente qui e perché? – amoebe