capistrano-resque:多阶段与不同:工人

时间:2014-07-11 14:43:15

标签: ruby-on-rails ruby capistrano resque

我有两个生产AWS实例,它们将运行resque但是正在侦听不同的队列。以下是我当前配置的示例:

配置/部署/生产/ prod_resque_1.rb

server "<ip>", :web, :app, :resque_worker, :db, primary: true

set :resque_log_file, "log/resque.log"
set :resque_environment_task, true

set :workers, {
  "queue1" => 5,
  "*" => 2
}

after "deploy:restart", "resque:restart"

配置/部署/生产/ prod_resque_2.rb

server "<ip>", :web, :app, :resque_worker, :db, primary: true

set :resque_log_file, "log/resque.log"
set :resque_environment_task, true

set :workers, {
  "queue2,queue3,queue4" => 5
}

after "deploy:restart", "resque:restart"

然后,我有一个&#34;全球&#34;配方:

load 'config/deploy/production/common'
load 'config/deploy/production/prod_resque_1'
load 'config/deploy/production/prod_resque_2'

显而易见的问题是,当我致电cap prod_resque resque:start时,:workers中的prod_resque_1定义会被prod_resque_2的加载覆盖,从而导致prod_resque_1 prod_resque_2让工作人员只听queue2queue3queue4

我的工作一直是cap prod_resque_1 resque:start然后cap prod_resque_2 resque:start,但这种方式违背了卡皮斯特拉诺的目的。

有关更清洁解决方案的任何建议,允许我运行cap prod_resque resque:start并拥有&#34;第一个&#34;服务器运行7个工作人员,5个听queue1,2个听所有队列,&#34;秒&#34;服务器运行5名工作人员,只收听queue2queue3queue4

1 个答案:

答案 0 :(得分:2)

在capistrano-resque docs中给出了一个示例:如果为每个服务器(或服务器组)分配不同的角色,则可以基于每个角色定义工作线程。

在你的情况下,你会做类似

的事情
role :queue_one_workers, [ip_from_prod_resque_1]
role :other_queue_workers, [ip_from_prod_resque_2]

set :workers, {
  :queue_one_workers   => {"queue1" => 5, "*" => 2},
  :other_queue_workers => {"queue2" => 5, "queue3" => 5, "queue4" => 5}
}