我创建了一个使用when gem 的应用程序。gem 创建 cron 作业。我让它在本地工作,但似乎无法让它在 heroku cedar 上工作。执行此操作的命令是什么?
跑步:
heroku run whenever --update-crontab job1
不工作
我创建了一个使用when gem 的应用程序。gem 创建 cron 作业。我让它在本地工作,但似乎无法让它在 heroku cedar 上工作。执行此操作的命令是什么?
跑步:
heroku run whenever --update-crontab job1
不工作
简短回答:使用调度程序插件:http ://addons.heroku.com/scheduler
长答案:当你运行 heroku 时,我们
您对 crontab 所做的任何更改都会立即被丢弃。一切都是短暂的,您无法在 heroku 上编辑文件,只需推送新代码。
您需要添加Heroku Scheduler插件。
您可以直接从仪表板添加它或使用以下命令:
安装add-on
:
heroku addons:create scheduler:standard
在中创建一个 rake 任务lib/tasks
# lib/tasks/scheduler.rake
task :send_reminders => :environment do
User.send_reminders
end
安排工作
add-ons
点击Add Job,输入任务并选择频率。
例如每天午夜添加rake send_reminders
、选择"Daily"
和发送提醒。"00:00"
如果你想:
Heroku Scheduler
这是我每分钟运行作业的解决方案——假设任务在 60 秒内完成。
task start_my_service: :environment do
1.upto(9) do |iteration|
start_time = DateTime.now
Services::MyService.call
end_time = DateTime.now
wait_time = 60 - ((end_time - start_time) * 24 * 60 * 60).to_i
sleep wait_time if wait_time > 0
end
end
其他答案指定您应该使用 Heroku Scheduler 插件,它确实能够运行后台任务,但它不支持 cron 的灵活性。
还有另一个名为Cron To Go的附加组件,它能够以 cron 的灵活性在一次性 dynos 上运行您的工作。您还可以为您的工作指定时区,并在工作失败、成功或开始时收到通知(电子邮件或网络挂钩)。
(完全披露——我为创建和运营 Cron To Go 的公司工作)