在 Heroku 上运行 delay_job 工作者?

Posted

技术标签:

【中文标题】在 Heroku 上运行 delay_job 工作者?【英文标题】:Running delayed_job worker on Heroku? 【发布时间】:2012-07-22 11:08:04 【问题描述】:

所以现在我有一个可以在我的本地开发环境中完美运行的延迟作业实现。为了在我的机器上启动worker,我只运行rake jobs:work,它运行良好。

为了让delayed_job 在heroku 上工作,我一直在使用几乎相同的命令:heroku run rake jobs:work。此解决方案有效,我无需为 Heroku 的工作人员费用支付任何费用,但我必须保持命令提示符窗口打开,否则 delay_job 工作人员会在我关闭它时停止。即使我关闭命令窗口,是否有一个命令可以永久保持这个 delay_job 工作人员工作?还是有另一种更好的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

我推荐workless gem 在heroku 上运行延迟作业。我现在使用它 - 它非常适合我,零麻烦且零成本。

我还使用了hirefireapp,它可以更好地控制缩放工作者。这需要花费,但成本低于单个 heroku 工人(超过一个月)。我现在不用这个,但是用过,效果很好。

【讨论】:

我安装了workless并配置了heroku变量。我现在该怎么办?它似乎不起作用。 您是否添加了配置(假设您使用的是 cedar)? config.after_initialize do Delayed::Job.scaler = :heroku_cedar end @DamonMannion +5 为您解答此问题 @Damon 我试过了,甚至添加了你发布的代码,但它根本不起作用......:|【参考方案2】:

添加

worker: rake jobs:work

致您的Procfile

编辑:

即使您从控制台运行它,您也“购买”了工作人员测功机,但 Heroku 有每秒计费。因此,您无需付费,因为您有 750 小时的免费时间,而在最坏的情况下,一个月有 744 小时,因此您有 6 小时的免费时间用于额外的测功机、调度程序任务等。

【讨论】:

即使您从控制台运行它,您也“购买”了工作人员测功机,但 Heroku 有每秒计费,因此您无需付费,因为您有 750 小时免费,而在最坏的情况下,一个月有 744 小时,所以您有 6 小时的免费时间用于额外的测功机、调度任务等。【参考方案3】:

我还没有亲自尝试过,但您可能会发现nohup 很有用。即使您关闭了终端窗口,它也允许您的进程运行。链接:http://linux.101hacks.com/unix/nohup-command/

【讨论】:

【参考方案4】:

使用 heroku 控制台让工作人员进入工作岗位只会为工作创建一个临时的测功机。要在没有 cli 的情况下保持作业运行,您需要按照@Lucaksz 的建议将命令放入 Procfile。

部署后,您还需要扩展 dyno 形成,因为 heroku 需要知道应该将多少 dyno 放入流程类型,如下所示: heroku ps:scale worker=1

更多详情可以在这里阅读https://devcenter.heroku.com/articles/scaling

【讨论】:

以上是关于在 Heroku 上运行 delay_job 工作者?的主要内容,如果未能解决你的问题,请参考以下文章

免费在 Heroku 上运行延迟作业

delay_job 更新查询无限运行

登录delay_job?

peerjs 在 loaclhost 上工作,但不在 heroku 上?

Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作

在 Heroku 上运行 Django/React 应用程序时,如何让 collectstatic 工作?