5

鉴于 unicorn 通常管理多个 Rails 服务器进程,并且考虑到 Resque 作业运行器可能比 Web 请求消耗更少的资源,因此应该可以在单个 Heroku dyno 上运行多个 resque worker。

到目前为止,有人成功地做到了这一点吗?我的想法是,一个简单的方法是让 Procfile 运行工头,然后运行实际工作人员的 2 个(或更多)实例(即rake resque:work

还是能rake resque:workers胜任这项任务?Resque 本身不建议使用该方法,因为这会在并行线程而不是并行进程中启动工作人员。

显然,这仅对 i/o 绑定作业有意义。

4

2 回答 2

8

可以使用工头启动多个进程。将工头添加到您的 Gemfile,然后创建两个文件:

档案

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 服务付费,无论如何,启动一台专用的工作机器可能会更容易。

于 2013-11-04T08:59:01.140 回答
1

根据这篇文章,这听起来是可能的,但最大的问题是如果其中一个子进程死了,Heroku 将无法重新启动它。

于 2013-11-03T06:08:47.003 回答