一般Rails app的定时任务是把ActiveJob
包成一个rake task
并通过crontab
执行。这种架构的适合用在分钟等级以上的定时任务。
但是Heroku并没有提供crontab
指令,在Heroku上运行定时任务必须用到一个插件:Heroku Scheduler
Heroku Scheduler
- 到Heroku App仪表板
- 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分钟等级的定时任务,若要更精细,只能使用应用层级的定时排程了。
转载需保留链接来源:软件玩家 » Rails应用程序在Heroku执行定时任务(计划任务)