Come posso eseguire un file Ruby in un ambiente Rails?


106

Voglio eseguire un file Ruby nel contesto di un ambiente Rails. rails runner fa quasi quello che voglio io, ma vorrei solo dargli il nome del file e gli argomenti. Sono abbastanza sicuro che questo sia possibile dato che l'ho fatto prima. Qualcuno può ricordarmi come farlo?

Risposte:



36

Richiedilo semplicemente environment.rbnel tuo copione. Se il tuo script si trova nella scriptdirectory della tua app Rails, fallo

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

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

RAILS_ENV=production ruby script/test.rb

Se eseguo il codice sopra, verrà visualizzato "home / apps / config / environment". Cosa succede se ho 2 app rails in esecuzione sulla stessa directory. Quale ambiente ci vorrà? Sto affrontando questo problema nella mia casella locale. suggerisco gentilmente
Vijay Sali

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

sì grazie ha funzionato per me, ho aggiunto anche ENV ['RAILS_ENV']
Vijay Sali

26

Runner esegue il codice Ruby nel contesto di Rails in modo non interattivo.

Dal rails runnercomando:

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.

Puoi anche usare runner come una linea shebang per i tuoi script in questo modo:

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

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

1
Perché funziona solo quando specifico "/ Users / me / rails_project / script / rails" per intero e non solo "rails"? TIA
iphone007

Anche gli altri comandi di rails richiedono l'elenco del percorso completo? (cioè server rails)
colsen

@ iphone007 può dipendere da dove stai eseguendo lo script.
David Moles

7

Questa è una vecchia domanda, ma secondo me spesso trovo utile creare un'attività 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 terminale esegui:

rake example:create_user

Localmente verrà eseguito nel contesto del database di sviluppo e, se eseguito su Heroku, verrà eseguito mentre è connesso al database di produzione. Lo trovo particolarmente utile per assistere con le migrazioni o le tabelle modificate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.