7

Rails 3.0.9 (RVM を使用) で crontab を使用して Rake タスクを実行しようとしていますが、機能していません。

しかし、コンソールで実行すると正常に動作します

私のレーキタスク

namespace :alert  do
  desc "create some reminder notification"
  task :send_reminder => :environment do
     p "my task goes here ----"
  end
end

私のcronタスク

*/1 * * * * cd /home/anu-karthik/Documents/billguru/ && /home/anu-karthik/.rvm/gems/ruby-1.9.2-p0/bin/rake  alert:send_reminder >/home/anu-karthik/alert.out

しかし、「alert.out」ファイルにログエントリが見つかりませんでした

また、次の方法で試しました

*/1 * * * * cd /home/anu-karthik/Documents/billguru/ && rake  alert:send_reminder >/home/anu-karthik/alert.out

現在、出力は (/home/anu-karthik/Documents/billguru 内)

RVMの問題だと思います。この問題を解決するにはどうすればよいですか? 前もって感謝します

4

5 に答える 5

13

RVM のドキュメントによると: https://rvm.io/integration/cron

すべての rvm または gemset には、それを記述する環境ファイルがあります。次の方法で取得できます。

rvm env --path -- ruby-version[@gemset-name]

それがrvmの環境ファイルへのパスです。

cron から rake タスクを実行するときは、シェル スクリプトから呼び出すのが良い習慣です。

crontab は次のようになります。

*/30 * * * * /path/to/shell/script.sh >/dev/null 2>&1

そして、シェルスクリプトで:

#!/bin/bash
cd /path/to/project
source /path/to/env/file
rake task

お役に立てれば!

于 2012-04-12T10:15:12.167 に答える
4

cron ジョブの作成とデプロイを管理するには、everything gem使用してみてください。

デフォルトでは、すべてのジョブは bash -l -c 'command...' で実行されます。とりわけ、これにより、cron の多少制限された環境ではなく、環境全体をロードすることで、cron ジョブが RVM とうまく連携できるようになります。詳細: http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production

説明から判断すると、それはあなたを助けるはずです。

于 2012-04-07T08:09:13.283 に答える
2

私はちょうどプロジェクトのためにこれを考え出しました:

https://rvm.io/integration/cron/から:

"For every installed ruby and created gemset RVM creates wrappers for basic command line tools like gem, rake, ruby. You can find them in `$rvm_path/bin`." 

したがって、上記のケースでは、次のようなことができます。

*/1 * * * * (cd /home/anu-karthik/Documents/billguru/; /usr/local/rvm/bin/rake-ruby-1.9.2-p290@billguru alert:send_reminder)

billguru は gemset、ruby-1.9.2-p290 は使用している ruby​​ のバージョンです。これは、システム全体の /usr/local/rvm に rvm がインストールされていることを前提としています。これにより、gemset の適切なレーキを使用して、gemset のコンテキストでレーキ タスクが実行されます。

上記の rvm.io ページには、同じことを実行する他の方法がいくつかリストされていますが、これは私にとってうまくいった方法です。

于 2013-04-10T00:12:27.223 に答える
0

RVM 環境をロード (使用) するだけで、rake のパスが次のように設定されます。

0 * * * * /home/user/.rvm/bin/rvm use ree-1.8.7-2011.03 rake name:task

ree-1.8.7-2011.03ロードしたいジェムセットの名前はどこですか?入力rvm listして、ジェムセットを表示します。

于 2012-05-14T18:39:24.653 に答える