我创建了一个使用随时随地宝石的应用。宝石创造了cron工作。我让它在本地工作,但似乎无法让它在heroku雪松上工作。执行此操作的命令是什么?
运行:
heroku run whenever --update-crontab job1
不起作用
答案 0 :(得分:69)
简答:使用调度程序加载项:http://addons.heroku.com/scheduler
答案很长:当你进行heroku运行时,我们
您对crontab所做的任何更改都会立即被删除。一切都是短暂的,你不能编辑heroku上的文件,只需推送新代码。
答案 1 :(得分:5)
您需要添加 Heroku Scheduler 插件。
您可以直接从信息中心或使用以下命令添加它:
安装add-on
:
heroku addons:create scheduler:standard
在lib/tasks
# lib/tasks/scheduler.rake
task :send_reminders => :environment do
User.send_reminders
end
安排工作
add-ons
列表点击 添加作业 ,输入任务并选择频率。
e.g。添加 rake send_reminders
,选择 "Daily"
和 "00:00"
,每天午夜发送提醒。
答案 2 :(得分:1)
其他答案指定您应该使用 Heroku Scheduler 插件,它确实能够运行后台任务,但它不支持 cron 的灵活性。
还有一个名为 Cron To Go 的附加组件,它能够利用 cron 的灵活性在一次性 dynos 上运行您的作业。您还可以为您的工作指定时区,并在工作失败、成功或开始时收到通知(电子邮件或网络钩子)。
(完全披露 - 我为创建和运营 Cron To Go 的公司工作)
答案 3 :(得分:0)
如果要:
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