所以现在我有一个delayed_job的实现,它在我的本地开发环境中完美运行。为了在我的机器上启动工作人员,我只需运行rake jobs:work
即可完美运行。
要让delayed_job在heroku上工作,我一直在使用几乎相同的命令:heroku run rake jobs:work
。这个解决方案可以工作,我不需要为Heroku支付任何工作成本,但我必须保持命令提示窗口打开,否则我关闭它时delayed_job工作程序停止。是否有命令永久保持这个delayed_job工作程序即使在我关闭命令窗口时也能正常工作?或者还有另一种更好的方法吗?
答案 0 :(得分:13)
我建议workless gem在heroku上运行延迟的作业。我现在使用它 - 它对我来说非常有效,零麻烦且零成本。
我还使用了hirefireapp,它可以对扩展工作程序进行更精细的控制。这需要花费,但成本低于单个heroku工作者(超过一个月)。我现在不使用它,但已经使用过它,并且效果非常好。
答案 1 :(得分:9)
添加
worker: rake jobs:work
到Procfile
。
修改强>
即使你从你的控制台运行它,你也会“购买”工人dyno,但Heroku每秒钟都会被打包。所以你不付钱,因为你有750小时免费,而最坏情况下的月有744小时,所以你可以免费获得6小时的额外动态,调度任务等等。
答案 2 :(得分:1)
我还没有亲自试过,但你可能会发现nohup
很有用。即使您已关闭终端窗口,它也允许您的进程运行。链接:http://linux.101hacks.com/unix/nohup-command/
答案 3 :(得分:0)
使用heroku控制台让工作人员进入工作岗位只会为工作创建一个临时的dyno。要保持作业在没有cli的情况下运行,您需要将命令放入Procfile中,如@Lucaksz建议的那样。
部署之后,你还需要缩放dyno形式,因为heroku需要知道应该将多少dyno放到进程类型上,如下所示: heroku ps:scale worker = 1