2009-04-17 11 views
11

Używam skryptu powłoki, aby uruchomić niektóre skrypty runner w mojej aplikacji Ruby on Rails. I trzeba uruchomić go na bazie produkcyjnej, ale następujący:Ruby on Rails: Jak mogę określić środowisko skryptu runner

#!/bin/bash 
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

daje błąd:

/usr/bin/ruby: No such file or directory -- RAILS_ENV=production (LoadError) 

Próbowałem zmusić go w config/environment.rb

ENV['RAILS_ENV'] ||= 'production' 

lub nawet

ENV['RAILS_ENV'] = 'production' 

, ale nawet z tym nadal działa w środowisku programistycznym.

Aktualizacja: Mogę zmusić skrypty do połączenia z odpowiednią bazą danych poprzez edycję pliku config/database.yml, ale zastanawiam się, jaki jest właściwy sposób.

+0

Czytałaś moją odpowiedź? Poprawnie wybierze środowisko, jeśli parametry zostaną przekazane w inny sposób. – Garrett

+0

Będzie działać, ale nie ustawi poprawnie środowiska. – Goro

+0

Coś jest nie tak z twoim skryptem, a nie z poleceniem. – Garrett

Odpowiedz

25

Pomoc w wierszu poleceń dla skryptu/biegacz daje ci Twoja odpowiedź.

script/runner -e production Model.method 
+0

Wobec tego samego problemu. To rozwiązanie sprawdziło się u mnie. Dzięki. +1 – Chirantan

+1

Nie mam skryptu/runnera, ale działa dla mnie script/rails runner -e production Model.method. –

+0

ani '' script/runner -e production Model.method'' ani '' script/rails runner -e production Model.method'' działał dla mnie ... działały jednak następujące rzeczy: '' RAILS_ENV = production rails runner - e produkcja Model.method'' – s2t2

5

Jeśli to twoje polecenie, kolejność twoich argumentów jest twoim największym problemem.

/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

Jest inny niż.

/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production 

Drugi przykład szuka pliku, pierwszy z nich jest ustawienie zmiennej wykonania podczas rubin interpretując ją jako plik, który chcesz uruchomić.

5

Jeśli przerobić skrypt tak:

#!/bin/bash 
RAILS_ENV=production 
/usr/bin/ruby ../script/runner ../lib/tasks.rb 

... że będzie to trzymać przez cały okres użytkowania skryptu. Aby uczynić go trzymać przez cały okres sesji powłoki, zmień go na

#!/bin/bash 
export RAILS_ENV=production 
/usr/bin/ruby ../script/runner ../lib/tasks.rb 
1

Można ustawić zmienną środowiskową takiego:

RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb 
0
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!' 

pracował dla mnie