2

コマンドラインで正常に実行できるrakeファイルがあります。このrakeファイルを実行するようにcronjobを設定すると、「require 'json'」という行が失敗します。私の推測では、cronjob には別の環境変数があると思います。rubyスクリプトに「puts ENV」を入れようとしたところうまくいきません。だから、さまざまなenv変数をチェックするために何をすべきか、問題を解決する方法を考えています。ありがとう。

4

4 に答える 4

3

cronで呼び出す方法かもしれません。これが私にとってうまくいくものです:

cd /full/path/to/rails_root && /full/path/to/rake RAILS_ENV=production my:task
于 2009-06-05T16:21:25.553 に答える
0

まずrequire "json"、rubygemsがロードされていないため、おそらく失敗しています。require 'rubygems'おそらく、上部に配置するか、cronジョブコマンドラインの先頭またはcronの環境に追加することで修正できRUBYOPT=rubygemsます(通常、環境変数はcrontabで設定できます)。

ENVデバッグの問題に答えるには: puts ENVcronジョブ中に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

于 2009-06-05T16:05:04.270 に答える
0

ありますか

require 'rubygems'

あなたのスクリプトで?たとえばirb、デフォルトで ruby​​gems をロードしますが、通常の実行には明示的なimportが必要です。

于 2009-06-05T15:54:23.863 に答える
0

別の方法: cron から実行するラッパー スクリプトを作成します。最初の行 - .profile (または .bash_profile など) を読み込みます。

于 2009-06-05T16:23:01.203 に答える