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