コマンドラインで正常に実行できるrakeファイルがあります。このrakeファイルを実行するようにcronjobを設定すると、「require 'json'」という行が失敗します。私の推測では、cronjob には別の環境変数があると思います。rubyスクリプトに「puts ENV」を入れようとしたところうまくいきません。だから、さまざまなenv変数をチェックするために何をすべきか、問題を解決する方法を考えています。ありがとう。
4 に答える
cronで呼び出す方法かもしれません。これが私にとってうまくいくものです:
cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
まずrequire "json"
、rubygemsがロードされていないため、おそらく失敗しています。require 'rubygems'
おそらく、上部に配置するか、cronジョブコマンドラインの先頭またはcronの環境に追加することで修正できRUBYOPT=rubygems
ます(通常、環境変数はcrontabで設定できます)。
ENV
デバッグの問題に答えるには: puts ENV
cronジョブ中にstdoutが知らない場所にリダイレクトされるために機能しない可能性はありますか(確かにターミナルに移動できません)?代わりに、次のことを試すことができます。
File.open('/tmp/debug_env', 'w') do |f|
f.puts ENV.to_hash.inspect
end
そして、/tmp/debug_env
そこに何があるかを見てみましょう。特に注意すべき環境変数は$USER
、、、、$GEM_HOME
です。$GEM_PATH
$RUBYOPT
ありますか
require 'rubygems'
あなたのスクリプトで?たとえばirb
、デフォルトで rubygems をロードしますが、通常の実行には明示的なimportが必要です。
別の方法: cron から実行するラッパー スクリプトを作成します。最初の行 - .profile (または .bash_profile など) を読み込みます。