heroku - 在单个员工赛道上,Ruby on Rails 并行后台任务

  显示原文与译文双语对照的内容
150 1

我们有一个 Rails 应用程序,某些请求在一个工作人员动态上触发长时间运行的任务。

我们的流量很小,但却增长了,任务通常只需要几秒钟才能完成,但是我们不能占用一分钟。现在一个单独的网络和工作台应该足以处理我们的负载。

问题是,delayed_job队列并不会并行处理作业,所以一个较长的任务会结束它后面的任务。

我们正在寻找的是一些类似于后端的,它的中单个工作,可以以同时处理多个任务。因为它是 Rails,我们正在寻找一个多进程,而不是多线程。

( 我们试图在我们的procfile-中创建多个工作条目,这在本地开发人员框中工作,但

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

本文提出了使用 resque池 gem 作为解决方案。这是唯一的解决方案,或者delayed_job也可以用于并行的后台作业?

时间:原作者:0个回答

140 0

根据 @radiospiel's 相关帖子,你可以使用foreman启动多个进程。

1 ) 将foreman添加到你的文件

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,很好。

原作者:
...