定期的にrake タスクを実行したい時、
サーバーに入れるならcronに登録すれば良いと思うのですが、
HerokuではHeroku Schedulerを使う必要があったのでやり方をメモします。
*Heroku Schedulerの実行はベストエフォートのようなので、本番環境で使うにはcustom clock processという方法が推奨されているようです。
1.プロジェクトフォルダーでheroku addons:create scheduler:standard
を実行
スケジューラーアドオンが登録されます。
➜ highlights_delivery git:(master) ✗ heroku addons:create scheduler:standard
Creating scheduler:standard on ⬢ hightdeliverer... free
To manage scheduled jobs run:
heroku addons:open scheduler
Created scheduler-asymmetrical-91648
Use heroku addons:docs scheduler to view documentation
➜ highlights_delivery git:(master) ✗
2.lib/tasks/scheduler.rake
ファイルを作ります。
このファイルに記述されたtaskがHeroku Schedulerの実行対象です。
desc "This task is called by the Heroku scheduler add-on"
task :update_feed => :environment do
puts "Updating feed..."
NewsFeed.update
puts "done."
end
task :send_reminders => :environment do
User.send_reminders
end
3.コンソールでheroku run rake update_feed
でタスクのテストができます。今回自分はvagrant使っていて、herokuコマンドはvagrant側にはインストールしておらず実行できない環境だったので飛ばしました
4.heroku addons:open schedulerk
を実行するとブラウザーでタスクの登録画面が開くので設定します。NEXTDUE(次の実行時間)はUTCなので気をつけてください。
以上で設定終了です。
スケジュールはHerokuのOverviewから確認できます。
本番の実行ログが見たいときには、Herokuのログから
schedulerのIDを調べて、 コンソールでheroku logs --ps scheduler.id
コマンドでschedulerの実行ログだけ表示可能です。
Heroku ViewLogs
2019-03-10T07:51:03.733908+00:00 app[scheduler.5299]: /app/bin/bundle:3:in `load'
2019-03-10T07:51:03.733910+00:00 app[scheduler.5299]: /app/bin/bundle:3:in `<main>'
2019-03-10T07:51:03.733911+00:00 app[scheduler.5299]: Tasks: TOP => on_a_daily_basis
2019-03-10T07:51:03.733913+00:00 app[scheduler.5299]: (See full trace by running task with --trace)
➜ app git:(master) heroku logs --ps scheduler.5299
2019-03-10T07:51:03.727169+00:00 app[scheduler.5299]: ICAgIDxwPjU4PC9wPg0KICAgIDxwPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS08
2019-03-10T07:51:03.727170+00:00 app[scheduler.5299]: L3A+DQogICAgPHA+5pel5pys5LyB5qWt44Gr44Gv44CM5L2Z6KOV44GM5qyy
2019-03-10T07:51:03.727172+00:00 app[scheduler.5299]: 44GX44GE44Gq44KT44Gm55SY44GI44Gg44CN44CM44GM44KT44Gw44KM44Gw
2019-03-10T07:51:03.727176+00:00 app[scheduler.5299]: 5L2Z6KOV44KC5L2c44KM44KL44CN44Go44GE44Gj44Gf57K+56We6Ku