在Heroku中实现延迟作业和cron作业

时间:2013-08-03 15:33:55

标签: ruby-on-rails heroku scheduled-tasks crontab delayed-job

我开发了一个延迟了作业和cron作业的应用程序,我需要将它部署到Heroku。我意识到我的延迟工作需要Heroku附加功能,“Heroku Scheduler Standard”,它的成本为34.50美元。 1)这是否意味着我需要购买,以便我的延迟和cron作业将自动运行?我想知道延迟工作和cron工作是否可以通过使用Heroku日程表来完成,那么为什么我们仍然需要javan / when和collectiveidea / delayed_job?我可以在Heroku中使用这些,最好是在免费状态吗?

2)我的cron工作在Heroku中不起作用。如何在heroku中运行我的任何宝石?

1 个答案:

答案 0 :(得分:4)

在你的问题中似乎有几个想法混杂在一起。我会尽力将它们分开:

a) Heroku上的DelayedJob

处理在DelayedJob中排队的作业(即位于数据库的delayed_jobs表中的记录)的一种方法是运行以下rake任务:

$ rake jobs:work

在heroku上,这个rake任务通常通过'worker'进程运行。

对于rails应用程序,默认情况下,你的heroku应用程序应该已经有一个“workers”(最初设置为0)的滑块,它将运行上面的rake任务。仅将其滑动到'1'(每月花费约34美元)将在后台的专用heroku实例上启动DelayedJob出列过程,使用您的代码库,独立于您的网络动力。

请注意,DelayedJob不需要Heroku的“Scheduler”插件。 另请注意,heroku按月处理数小时收费。因此,如果您将“工人”每月滑动到“1”一小时,然后在完成后再将其滑回“0”,您将支付的费用远远低于~34美元的费用。还有一种方法可以以编程方式打开和关闭工作人员。

b) Cron on Heroku

目前,在heroku或其他基于云的应用服务提供商上无法管理您自己的自定义cron 文件。一切都是短暂的,部署的文件不能被您或您的代码更改。

在这种情况下,Heroku的Scheduler是替换cron的合适附加组件。您应该能够在heroku调度程序中设置任务来执行您的cron任务当前正在执行的操作。

最后我查了一下,heroku的调度程序是免费的(参见:https://addons.heroku.com/scheduler),所以我不确定你为什么说这是34.50美元。

希望这有帮助。