鉴于unicorn通常管理多个Rails服务器进程,并且假设Resque作业运行器可能比Web请求消耗更少的资源,则应该可以在单个Heroku dyno上运行多个resque worker。
到目前为止,有人这样成功吗?我的想法是,一个简单的方法就是让Procfile运行foreman,然后运行2个(或更多)实际工作者的实例(即rake resque:work
)
或者rake resque:workers
是否完成了这项任务? Resque本身并不建议使用该方法,因为这会以并行线程而不是并行进程启动worker。
显然,这仅适用于I / O绑定作业。
答案 0 :(得分:8)
可以使用工头来启动多个流程。将foreman添加到Gemfile中,然后创建两个文件:
<强> Procfile 强>:
worker: bundle exec foreman start -f Procfile.workers
<强> Procfile.workers 强>:
worker_1: QUEUE=* bundle exec rake resque:work
worker_2: QUEUE=* bundle exec rake resque:work
可以使用相同的技术与一些工作人员一起运行Web服务器。
注意:虽然许多州使用这种方法取得了成功,但我不建议在某些实验之外使用它,主要是因为在小型heroku实例上遇到RAM限制的风险;一旦你为heroku服务付费,无论如何都可以更容易地启动专用的工作机器。
答案 1 :(得分:1)
基于this article,听起来似乎有可能,但最大的问题是,如果其中一个子进程死掉,Heroku将无法重新启动它。