2009-04-17 12 views
11

Ruby on Railsアプリケーションでランナースクリプトを実行するためにシェルスクリプトを使用しています。私は、本番データベース上で実行する必要がありますが、以下:私はのconfig/environment.rbにRuby on Rails:ランナースクリプト環境を指定する方法

ENV['RAILS_ENV'] ||= 'production' 
にそれを強制しようとしてい

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

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

はエラーになります

またはさらに

ENV['RAILS_ENV'] = 'production' 

でも、それでも開発環境では動作します。

アップデート:config/database.ymlファイルを編集してスクリプトを適切なデータベースに強制的に接続することができますが、それを行う正しい方法は何か不思議です。

+0

は、あなたが私の回答を読んでいる私のために働きましたか?パラメータを別々に渡すと、環境が正しく選択されます。 – Garrett

+0

実行されますが、環境が正しく設定されません。 – Goro

+0

スクリプトで何か問題があり、コマンドでは間違っています。 – Garrett

答えて

25

スクリプトのコマンドラインのヘルプは、/ランナーはあなたを与える:それはあなたがこのような環境変数を設定することができ、シェルのセッションの存続のために固執

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

同じ問題に直面しました。このソリューションは私のために働いた。ありがとう。 +1 – Chirantan

+1

スクリプト/ランナーはありませんが、script/rails runner -e production Model.methodが動作します。 –

+0

'' script/runner -e production Model.method''や '' script/rails runner -e production Model.method''は私のために働いていませんでした...しかし、次のように動作しました: '' RAILS_ENV = production rails runner- eの生産Model.method'' – s2t2

5

これがあなたのコマンドなら、議論の順序が最大の問題です。

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

とは異なります。 2番目の例では、ファイルを探している

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

ルビーはあなたが実行したいファイルとしてそれを解釈しながら、最初のものは、ランタイム変数を設定しています。

5

あなたがこのようにスクリプトを再実行した場合:

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

...それはスクリプトの寿命のために固執ようになりますこと。

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

にそれを変更するようにするにはあなたの答え。

script/runner -e production Model.method 
0
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!' 

それは

関連する問題