单工dyno的并行背景任务
我们有一个Rails应用程序,其中某些请求在具有delayed_job的worker dyno上触发长时间运行的任务,而前端轮询直到它收到结果。
我们的流量虽小但增长很快,而且任务通常只需几秒钟即可完成,但最多可能需要一分钟。 现在,每个web和worker dyno都应该足以处理我们的负载。
问题是,delayed_job队列不会并行处理作业,因此较长的任务最终会阻碍其后面的任务。
我们正在寻找的是类似Unicorn的后端,其中单个工作人员dyno可以同时处理多个任务。 因为它是Rails,我们正在寻找多进程而不是multithreading的东西。
(我们尝试在procfile中创建多个worker条目 – 这在本地开发框中工作,但不在Heroku上工作)
Procfile:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb # Multiple workers defined here doesn't translate into multiple processes on single worker dyno: worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work
这篇Heroku文章建议使用resque-pool gem作为解决方案。 这是唯一的解决方案,还是delayed_job也可以用于并行后台作业?
根据@ radiospiel的相关post ,您可以使用foreman启动多个进程。
1)将工头添加到您的Gemfile中
2)创建两个文件:
Procfile:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb worker: bundle exec foreman start -f Procfile.workers
Procfile.workers:
dj_worker: bundle exec rake jobs:work dj_worker: bundle exec rake jobs:work dj_worker: bundle exec rake jobs:work
我刚把它部署到Heroku,效果很好。
- Heroku Rails Net :: HTTP:OpenSSL :: SSL :: SSLError:SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书validation失败
- Rails 3.1.1资产管道Heroku缓存问题
- 如何增加Heroku 30s h12超时
- Heroku:使用回形针运行imagemagick
- Heroku上的Rails 3.1.3 :(没有路由匹配“/assets/rails.png”)
- “identify”命令无法识别图像文件。 (Heroku的)
- 为什么dropdown-toggle(bootstrap)在heroku上不起作用?
- heroku上的bitbucket私有存储库
- “我们很遗憾,但出了问题。”在部署到Heroku之后