1

我刚刚切换到在 Heroku 上使用 Unicorn。我还将从 delay_job 切换到 resque 并使用http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html中描述的设置

我不明白的是 config/unicorn.rb 如何:

worker_processes 3
timeout 30

@resque_pid = nil

before_fork do |server, worker|
  @resque_pid ||= spawn("bundle exec rake " + \
  "resque:work QUEUES=scrape,geocode,distance,mailer")
end

翻译成:

“这实际上会在每个 web dyno 中产生六个进程:1 个 unicorn master,3 个 unicorn web workers,1 个 resque worker,1 个 resque child worker,当它实际处理工作时”

有多少工人将实际处理后台作业?1 还是 2?

假设我想增加 resque 工人的数量 - 我会改变什么?

4

1 回答 1

1

我想如果你运行那个块,你的 unicorn master 已经在运行,再加上你在文件顶部指定的 3 个 web worker,然后下面的块启动一个 Resque worker(如果它还没有启动)。

我猜 Resque 在实际执行工作时会自行启动一个童工。

看起来如果你想要另一个 Resque 工作人员,你可以这样做

worker_processes 3
timeout 30

@resque_pid = nil
@resque_pid2 = nil

before_fork do |server, worker|
  @resque_pid ||= spawn("bundle exec rake " + \
  "resque:work QUEUES=scrape,geocode,distance,mailer")
  @resque_pid2 ||= spawn("bundle exec rake " + \
  "resque:work QUEUES=scrape,geocode,distance,mailer")
end

根据我使用 Resque 的经验,它就像启动上面指定的另一个进程一样简单。我唯一不确定的是 Heroku 以及它如何选择处理给你更多的工人。

于 2012-07-10T14:15:24.373 回答