【问题标题】:Implement Delayed job and cron job in Heroku在 Heroku 中实现延迟作业和 cron 作业
【发布时间】:2013-08-04 18:11:59
【问题描述】:
我开发了一个延迟作业和 cron 作业的应用程序,我需要将它部署到 Heroku。我意识到我的延迟工作需要 Heroku 附加组件,“Heroku Scheduler Standard”,它的成本为 34.50 美元。
1)这是否意味着我需要购买它以便我的延迟和cron作业自动运行?我想知道延迟作业和cron作业是否可以通过使用Heroku schedular来完成,那么为什么我们仍然需要javan/whenever和collectiveidea/delayed_job?我可以在 Heroku 中免费使用这些吗?
2) 我的 cron 工作在 Heroku 中不起作用。如何在 heroku 中运行我的每当 gem?
【问题讨论】:
标签:
ruby-on-rails
heroku
scheduled-tasks
crontab
delayed-job
【解决方案1】:
您的问题中似乎混杂了一些想法。我会尽力将它们分开:
a) Heroku 上的延迟作业
处理在 DelayedJob 中排队的作业(即位于数据库中的延迟作业表中的记录)的一种方法是运行以下 rake 任务:
$ rake jobs:work
在 heroku 上,这个 rake 任务通常通过“工作”进程运行。
默认情况下,对于 rails 应用程序,您的 heroku 应用程序应该已经带有一个用于运行上述 rake 任务的“workers”滑块(最初设置为 0)。只需将其滑至“1”(每月花费大约 34.00 美元),就会在专用 heroku 实例的后台启动 DelayedJob dequeue 进程,使用您的代码库,独立于您的 web dynos。
请注意,DelayedJob 不需要 Heroku 的“调度程序”插件。
另请注意,heroku 按每月处理小时数收费。因此,如果您每月将“工人”滑到“1”一小时,然后在完成后再次滑回“0”,那么您支付的费用将远远低于约 34 美元的费用。还有一种方法可以以编程方式让工作人员上下滑动。
b) Heroku 上的 Cron
就目前而言,在 heroku 或其他基于云的应用服务提供商上管理您自己的自定义 cron 文件 是不可能的。一切都是短暂的,您或您的代码无法更改已部署的文件。
Heroku 的调度程序是在这种情况下替换 cron 的合适插件。您应该能够在 heroku 调度程序中设置任务来执行您的 cron 任务当前正在执行的操作。
上次我查了一下,heroku 的调度程序是免费的(请参阅:https://addons.heroku.com/scheduler),所以我不确定你为什么说它是 34.50 美元。
希望这会有所帮助。