在Heroku上运行delayed_job工作者?

16

现在我已经成功地在本地开发环境上实现了延迟作业,并且它运行得非常完美。为了在我的机器上启动工作程序,我只需运行rake jobs:work命令即可。

为了让delayed_job在Heroku上工作,我一直在使用几乎相同的命令:heroku run rake jobs:work。这种解决方案可以正常工作,而且不需要向Heroku支付任何工人费用,但是我必须保持我的命令提示窗口打开,否则当我关闭它时,delayed_job工作者会停止工作。是否有一个命令可以永久保持这个delayed_job工作者在我关闭命令窗口后继续工作?或者有其他更好的方式来解决这个问题吗?

4个回答

13

我推荐使用workless gem在Heroku上运行延迟任务。我现在使用它-对我来说,它完美地工作,零麻烦和零成本。

我也曾经使用过Hirefireapp,它可以更好地控制扩展工作进程的数量。这是需要花费的,但比单个Heroku工作进程(一个月)的费用要低。我现在不再使用它,但曾经用过它,它非常有效。


我安装了Workless并配置了Heroku变量。现在该怎么办?它似乎没有起作用。 - Danish M.
你添加了配置文件吗?(假设你正在使用Cedar平台)config.after_initialize do Delayed::Job.scaler = :heroku_cedar end - Damon Mannion
@DamonMannion 这个答案给你加上了5分。 - Kashiftufail
@Damon,我试过了,甚至加入了你发布的代码,但它根本不起作用... :| - Sheharyar

9

添加

worker: rake jobs:work

将以下内容添加到您的Procfile文件中。

编辑:

即使您从控制台运行它,您也需要购买工作进程,但Heroku按秒计费。因此,您不需要支付费用,因为您有750小时的免费时间,在最坏的情况下,一个月有744小时,因此您可以免费获得额外的工作进程、调度程序任务等6小时。


5
即使您从控制台运行它,您仍然需要购买工作人员dyno,但Heroku是按秒计费的,因此您不必支付费用,因为您可以获得750小时的免费时间,而最坏情况下一个月只有744小时,因此您可以免费使用6小时来添加额外的dyno、定期任务等。 - Hauleth

1

0
使用heroku控制台将工作程序添加到作业只会创建一个临时的动力资源用于该作业。为了保持作业运行而不使用命令行界面,您需要按照@Lucaksz建议的方法将命令放入Procfile中。

部署后,您还需要调整动力资源的形成,因为heroku需要知道应将多少个动力资源放入该过程类型,如下所示: heroku ps:scale worker=1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接