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 にしてくれればいいのに。もう。