1

毎日1回実行したいrakeタスクが1つあります。実稼働環境ではrvmがインストールされています

schedule.rbに私が持っている

set :output, "/home/username/data/public_html/log/cron_log.log"
every 24.hours do
  rake "fetch:smth"
end

crontab -l は私を示しています:

MAILTO="my.mail@gmail.com"
PATH="/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby "
@daily cd /home/username/data/www/nameofsite.com && RAILS_ENV=production bundle   exec rake fetch:smth

本当に、私は少し混乱しています。以前は cron の経験がなかったので、助けてください。

編集#1

私はrvm env -- path 1.9.3@global を実行しました。

PATH="/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:$PATH"

そして、私は

MAILTO="said.kaldybaev@gmail.com"
PATH="/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:$PATH"
@daily  RAILS_ENV=production rake rate:fetch

そして、ISPmanager から execute を実行すると、次のように表示されました: Exited with return code = 1以下 のリンクは、終了エラーが 1 の場合、既に /var/run/cron.pid ファイルがあることを示しています。それは本当ですが、私はルート権限を持っていません

4

1 に答える 1

2

schedule.rbcronからタスクを呼び出す場合は必要ありません。これは@daily、crontabのエントリによって処理されます。ログファイル名を環境変数として設定し、rakeタスクにそれを参照させるだけです。$PATHおそらく、ルビーバイナリへのパスだけでなく、さらに多くのものが必要になるでしょう。そうbundleしないと、見つかりません。あなたがルビーへの道を与えている間、あなたは実際にあなたが何を意味するのかを知るためにRVMのためにそれを選択していないので、それは正しい宝石セットを見つけることができないでしょう。RVMは、この種のタスクに対して正しいことを行うラッパーを提供します。これを置き換えるbundle exec/usr/local/rvm/wrappers/ruby-1.9.3-p125 -S bundle exec、機能するはずです。

それがあなたにいくつかのアイデアを与えることを願っています。ここにはもっとあります。

更新#1

Edit#1を使用すると、1つの問題を修正し、別の問題を作成しました。それでもcdアプリディレクトリに移動する必要があります。そうしないと、rakeはRakefileを見つけられません。

于 2012-03-13T07:01:42.033 に答える