Rails
如何在 Heroku 上執行定時任務(Scheduled Task)
一般 Rails app 的定時任務是把 ActiveJob
包成一個 rake task
並透過 crontab
執行。
Published in
2 min readApr 20, 2019
這種架構的適合用在分鐘級別以上的定時任務,但是 Heroku 並沒有提供 crontab
指令。
在 Heroku 上運行定時任務必須用到一個 addon:Heroku Scheduler
Heroku Scheduler
- 到 Heroku App dashboard
- Resouces 頁籤
- 新增一個 Heroku Scheduler 的 addon
- Add new job
- 輸入 sh ,並設定執行頻率。這邊以每月25號寄送生日通知信為例 (
rails mail:birth_notification
),我設定頻率為每天,它每天都會檢查今天是不是 25日,是則執行後面的指令
# every months 25th do this rake task
if [ "$(date +%d)" = 25 ]; then rails mail:birth_notification; fi
Heroku Scheduler 最小只提供間距為 10 分鐘級別的定時任務,若要更精細,只能使用應用層級的定時排程了例如: