2014年11月28日金曜日

rbenvの環境でcronでrakeタスクを動かしてはまった

rakeタスクを作って、localでも動いたし、staging環境で手動で動かしても動作したのに、
cronで実行させると動かなくてはまったときの話です。

まずは手動で動かすために以下のようなコマンドを手動で実行しました。
bundle exec rake aaa:bbb
とりあえず動きはしたものの、staging環境の設定で動きませんでした。
調べたところ、RAILS_ENV=stagingをつける必要があるようです。
bundle exec rake aaa:bbb RAILS_ENV=staging
手動で動いたのでcronを以下のように設定しました。
crontab -l
0 * * * * cd /home/xxx/app && bundle exec rake aaa:bbb RAILS_ENV=staging
時間が来てうまく動かなかったので調べたところ、PATHにrbenv/shimsが入ってないようでした。
cronでrbenvのrubyを使うのにはいくつか方法があるようですが、
他の環境や設定に影響を与えない/bin/bash -lc 'コマンド'でやることにしました。
0 * * * * /bin/bash -lc 'cd /home/xxx/app && bundle exec rake aaa:bbb RAILS_ENV=staging'

RAILS_ENVのところは環境別に書きかわるようにしたかったので、
crontabにつらつら書くのではなくてシェルを作って動的に変わるように対応しました。


参考URL
http://pentan.info/ruby/ror/rake_list.html
http://blog.livedoor.jp/sonots/archives/33204053.html

0 件のコメント:

コメントを投稿