3

我在delayed_job 中使用命名队列来保持任务被服务器隔离:

subdomain = Socket.gethostname.split('.')[0]
MyModel.delay(:queue => (subdomain + "_queue")).get_some_records

当我在每台服务器上启动延迟作业时,我需要设置--queue标志。可以将参数传递给 delay_job CL set :delayed_job_args。AFAIK,Capistrano 允许使用$CAPISTRANO:HOST$inrun命令,但这对我没有帮助set

作为一种解决方法,我已经像这样覆盖了delayed_jobs 任务:

desc "Start the delayed_job process"
  task :start, :roles => lambda { roles } do
  run "cd #{current_path};#{rails_env} script/delayed_job start --queue=$CAPISTRANO:HOST$_queue #{args}"
end

有没有办法按预期使用set?我希望能够做这样的事情:

set :delayed_job_args, "--queue=#{ hostname }_queue"

更新

我发现了另一种笨拙(而不是那么干燥)的方法来做到这一点,但set如果可能的话,我仍然想这样做:

desc "Start the delayed_job process"
task :start, :roles => lambda { roles } do
  parallel do |session|
    session.when "server.host =~ /server1/", "cd #{current_path};#{rails_env} script/delayed_job start --queue=server1_queue #{args}"
    session.when "server.host =~ /server2/", "cd #{current_path};#{rails_env} script/delayed_job start --queue=server2_queue #{args}"
    session.else "cd #{current_path};#{rails_env} script/delayed_job restart #{args}"
  end
end

Rails 3.2.8,delayed_job 3.0.3,capistrano 2.13.4。

4

1 回答 1

0

怎么样 … ?

set :delayed_job_args, "--queue=#{ $CAPISTRANO:HOST$ }_queue"

我没有在 Cap 中亲自测试过这一点,但这似乎是合乎逻辑的。

于 2014-02-07T14:07:25.510 回答