“无论何时” gem 在 Heroku 上运行 cron 作业
Posted
技术标签:
【中文标题】“无论何时” gem 在 Heroku 上运行 cron 作业【英文标题】:"Whenever" gem running cron jobs on Heroku 【发布时间】:2012-01-27 00:45:53 【问题描述】:我创建了一个使用when gem 的应用程序。 gem 创建 cron 作业。我让它在本地工作,但似乎无法让它在 heroku cedar 上工作。执行此操作的命令是什么?
运行:
heroku run whenever --update-crontab job1
没用
【问题讨论】:
【参考方案1】:简答:使用调度程序插件:http://addons.heroku.com/scheduler
长答案:当你运行 heroku 时,我们
-
旋转测功机
把你的代码放在上面
执行你的命令,等待它完成
把测功机扔掉
您对 crontab 所做的任何更改都会立即被丢弃。一切都是短暂的,你不能在 heroku 上编辑文件,只能推送新代码。
【讨论】:
对于长时间运行的任务应该怎么做? (需要几个小时才能执行) 这很好,您将在 24 小时内完成它 @Will,但应用程序需要至少每小时生成一次输出,对吧? (“与一次性测功机的连接将在不活动一小时后关闭(在输入和输出中)。) Scheduler docs 声明其“尽力服务”,这意味着无法保证您的任务会运行。如果您需要更可靠的东西 - 就像我的付款处理一样 - 试试clock processes。 那么在 Heroku 上部署 Rails 应用程序时,Heroku 调度程序本质上是否使每当 Gem 变得不必要?尤其是当你有简单的 cron 工作时?我认为使用调度程序会有效地使Whenever gem 无用或者我错过了什么?【参考方案2】:您需要添加Heroku Scheduler插件。
您可以直接从仪表板添加它或使用以下命令:
安装add-on
:
heroku addons:create scheduler:standard
在lib/tasks
中创建一个rake任务
# lib/tasks/scheduler.rake
task :send_reminders => :environment do
User.send_reminders
end
安排工作
访问Heroku Dashboard 打开您的应用 从add-ons
列表中选择调度程序
点击添加工作,输入任务并选择频率。
例如添加rake send_reminders
,选择"Daily"
和"00:00"
每天午夜发送提醒。
【讨论】:
【参考方案3】:如果你想:
使用Heroku Scheduler
每分钟运行一次任务(不是 10 分钟)
不要在意测功时间
这是我每分钟运行作业的解决方案技巧 - 假设任务在 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
【讨论】:
【参考方案4】:其他答案指定您应该使用 Heroku Scheduler 插件,它确实能够运行后台任务,但它不支持 cron 的灵活性。
还有一个名为Cron To Go 的附加组件,它能够以cron 的灵活性在一次性dynos 上运行您的工作。您还可以为您的作业指定时区,并在作业失败、成功或开始时收到通知(电子邮件或网络挂钩)。
(完全披露 - 我为创建和运营 Cron To Go 的公司工作)
【讨论】:
以上是关于“无论何时” gem 在 Heroku 上运行 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章
Error-Bundler 找不到 gem“bundle”的兼容版本:在 Heroku 上推送项目时
ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。