Heroku + cron
Heroku のアドオンに Cron がある。1 日 1 回の ではあるが、無料で Cron が使用できる。今回コレを初めて使用した。そのときのメモ。
Herokuの設定
次のコマンドで daily の cron が有効になる。
% heroku addons:add cron:daily
cron が起動する時間は http://devcenter.heroku.com/articles/cron-run-time によると、cron のアドオンを有効にした時点とのこと。
なかなか粋な作り。深夜 3 時に動かしたい場合は、その時刻にコマンドを実行しないといけない。ああ、heroku の cron を有効にするコマンドをローカルの cron に仕込めばいいのか。
タスク
cron に実行させる処理は Rake の cron タスクとして登録させておく。Rakefile を作成し cron タスクを追加する。
task :cron do # cron の処理 end
Rake を初めて使った。Make の Ruby 版だから Rake ということらしい。
実行
当然その時がくれば実行される。けれど動作確認時に 1 日 1 回 のチャンスを逃したらまた明日、というのは非常につらい。次のコマンドで cron タスクを実行することが出来る。
% heroku rake cron
コマンドを手で実行する方法と cron から実行する方法は、厳密に言えば別ものなので、最終的なテストは cron で起動させて行った方がいいと思う。
昔それで痛い目にあった。原因は何だったかな 環境変数の違いだったかな...?
ログ確認
実行結果はログで確認。なのだけれど http://devcenter.heroku.com/articles/cron に書いてあるコマンドを実行すると、エラーが出てしまう。
% heroku logs --ps cron.1 ! Realtime tail and filter are not available with basic logging, please upgrade to expanded logging
basic logging ではなく、expanded logging にしないとダメらしい。 expanded は無料ではないんだろうなと思いつつも、http://addons.heroku.com/logging を見ると、expanded でも無料とある。早速アップデートする。
% heroku addons:upgrade logging:expanded
これで
% heroku logs --ps cron.1
を実行してもエラーが出なくなった。始めっから expanded にしてくれればいいのに。もう。