微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 通过Capistrano任务启动具有特定队列的多个DelayedJob工作

我正在研究使用具有delayed_job的队列.我找到了 this page,其中列出了各种启动工作的方式,但是我想保留我当前的Capistrano方法
set :delayed_job_args,"-n 2 -p ecv2.production"
after "deploy:start","delayed_job:start"
...

我想知道如何修改delayed_job_args来处理具有特定队列的1个worker,每个其他作业有1个worker.到目前为止,我所有的都是如此覆盖每个任务:

namespace :delayed_job do
  task :restart,:roles => :app do
    run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -p ecv2.production --queue=export restart"
    run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -p ecv2.production restart"
  end
end

…但是没有乐趣有什么建议么?

解决方法

我将我的作业分成两个队列,一个工作者在我的deploy.rb文件中使用此设置隔离到每个队列:
namespace :delayed_job do
  task :start,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_one --queue=one start"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_two --queue=two start"
  end

  task :stop,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_one --queue=one stop"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_two --queue=two stop"
  end

  task :restart,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_one --queue=one restart"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i queue_two --queue=two restart"
  end
end

命令的-i名称部分非常重要.这是允许多个delayed_job实例运行的部分.

如果要将工作人员添加到特定的队列中,那么您可以像这样扩展它们(我仅有两名工作人员在排队队列中排队,另外一名员工排在队列二上):

namespace :delayed_job do
  task :start,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one1 --queue=one start"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one2 --queue=one start"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i two --queue=two start"
  end

  task :stop,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one1 stop"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one2 stop"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i two stop"
  end

  task :restart,roles: :app do
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one1 --queue=one restart"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i one2 --queue=one restart"
    run "cd #{current_path}; #{rails_env} bundle exec script/delayed_job -i two --queue=two restart"
  end
end

原文地址:https://www.jb51.cc/ruby/271453.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐