gpt4 book ai didi

ruby-on-rails - 通过 Capistrano 任务启动具有/特定队列的多个延迟作业工作人员

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:48 28 4
gpt4 key购买 nike

我正在考虑将队列与 delayed_job 结合使用。我找到了 this page其中概述了启动 worker 的各种方式,但我想保留我目前的 Capistrano 方法:

set :delayed_job_args, "-n 2 -p ecv2.production"
after "deploy:start", "delayed_job:start"
...

我想知道如何修改 delayed_job_args 以处理生成具有特定队列的 1 个工作人员,以及每个其他工作的 1 个工作人员。到目前为止,我所拥有的只是像这样覆盖每个任务:

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 name部分非常重要。这是允许多个 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

关于ruby-on-rails - 通过 Capistrano 任务启动具有/特定队列的多个延迟作业工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9524200/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com