在 Heroku 中实现 Delayed job 和 cron job

sho*_*_sm 0 ruby-on-rails heroku crontab scheduled-tasks delayed-job

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

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

cha*_*ows 5

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

a) Heroku 上的延迟作业

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

$ rake jobs:work
Run Code Online (Sandbox Code Playgroud)

在 heroku 上,这个 rake 任务通常通过一个“worker”进程来运行。

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

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

b) Heroku 上的 Cron

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

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

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

希望这可以帮助。