2012-03-18 13 views
76

Voglio eseguire un file Ruby nel contesto di un ambiente Rails. runner fa quasi quello che voglio fare, ma mi piacerebbe solo dargli il nome del file e gli argomenti. Sono abbastanza sicuro che questo è possibile da quando l'ho fatto prima. Qualcuno può ricordarmi come farlo?Come si esegue un file Ruby in un ambiente Rails?

risposta

28

Basta richiedere environment.rb nel tuo script. Se lo script si trova nella directory script dei tuoi Rails fare

require File.expand_path('../../config/environment', __FILE__) 

È possibile controllare l'ambiente utilizzato (sviluppo/test/produzione) impostando la variabile di ambiente RAILS_ENV durante l'esecuzione dello script.

RAILS_ENV=production ruby script/test.rb 
+0

Se corro sopra il codice, fornirà "home/apps/config/environment". Cosa succede se ho 2 app di rotaie in esecuzione nella stessa directory. Quale ambiente ci vorrà? sto affrontando questo problema nella mia casella locale. suggerire gentilmente –

+0

@VijaySali presumo che tu stia eseguendo il tuo script dalla directory 'app/script'. Il file dell'ambiente verrà preso dalla singola app. – iltempo

+0

sì, ha funzionato per me, ho aggiunto ENV ['RAILS_ENV'] pure –

18

Runner corre codice Ruby nel contesto di Rails non interattiva.

Da rails runner comando:

Usage: runner [options] ('Some.ruby(code)' or a filename) 

    -e, --environment=name   Specifies the environment for the runner to operate under (test/development/production). 
            Default: development 

    -h, --help      Show this help message. 

È anche possibile utilizzare corridore come una linea di shebang per gli script come questo:

------------------------------------------------------------- 
#!/usr/bin/env /Users/me/rails_project/script/rails runner 

Product.all.each { |p| p.price *= 2 ; p.save! } 
------------------------------------------------------------- 
+0

Perché funziona solo quando specifichi "/ Users/me/rails_project/script/rails" in pieno e non solo "rails"? TIA – iphone007

+0

Anche i comandi degli altri binari richiedono di elencare il percorso completo? (cioè il server delle rotaie) – colsen

3

Questa è una vecchia questione, ma a mio parere spesso trovo è utile creare un compito di rake ... ed è in realtà molto semplice.

In lib/tasks/example.rake:

namespace :example do 

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal" 
task create_user: :environment do 
    User.create! first_name: "Foo", last_name: "Bar" 
end 

E poi nel periodo terminale:

rake example:create_user 

Localmente questo verrà eseguito nel contesto del database di sviluppo, e se eseguito su Heroku esso verrà eseguito mentre è connesso al tuo database di produzione. Trovo questo particolarmente utile per aiutare con le migrazioni, o tabelle modificate.

Problemi correlati