gpt4 book ai didi

ruby-on-rails - 需要访问 delayed_job 命名队列的 Capistrano 配置变量中的当前主机名

转载 作者:行者123 更新时间:2023-12-05 08:01:32 25 4
gpt4 key购买 nike

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

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

当我在每台服务器上启动 delayed_job 时,我需要设置 --queue 标志。可以使用 set :delayed_job_args 将参数传递给 delayed_job CL。据我所知,Capistrano 允许在 run 命令中使用 $CAPISTRANO:HOST$,但这对我使用 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。

最佳答案

怎么样……?

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

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

关于ruby-on-rails - 需要访问 delayed_job 命名队列的 Capistrano 配置变量中的当前主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259746/

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