加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 仅在特定服务器上调用delayed_job capistrano任务

发布时间:2020-12-16 19:18:25 所属栏目:百科 来源:网络整理
导读:我有一个用于delayed_job任务的专用服务器.我想只在这台服务器上启动,停止和重启delayed_job worker.我正在使用delayed_job提供的capistrano食谱. 当我只有1台服务器时,这是我的配置: before "deploy:restart","delayed_job:stop"after "deploy:restart","d
我有一个用于delayed_job任务的专用服务器.我想只在这台服务器上启动,停止和重启delayed_job worker.我正在使用delayed_job提供的capistrano食谱.

当我只有1台服务器时,这是我的配置:

before "deploy:restart","delayed_job:stop"
after  "deploy:restart","delayed_job:start"

after "deploy:stop","delayed_job:stop"
after "deploy:start","delayed_job:start"

现在我想让这些钩子只适用于一个单独的delayed_job服务器(角色:delayed_job< ip address>).这可能优雅吗?我是否必须在meta任务中包装每个delayed_job任务?或者写我自己的任务而不是使用延迟工作提供的任务?

解决方法

在Capistrano中定义任务时,可以将任务的执行限制为特定角色.执行此操作的方法是传递:role选项.

似乎default delayed_job Capistrano recipe就是这样做的.

desc "Stop the delayed_job process"
task :stop,:roles => lambda { roles } do
  run "cd #{current_path};#{rails_env} script/delayed_job stop"
end

根据源代码,任务从:delayed_job_server_role配置变量中获取角色列表.

回到您的问题,将任务的执行范围缩小到特定的服务器组,在deploy.rb中定义一个新角色(例如worker)

role :worker,"192.168.1.1" # Assign the IP of your machine

然后将:delayed_job_server_role设置为该名称

set :delayed_job_server_role,:worker

就这样.现在,任务将被执行,但仅限于:worker角色中列出的服务器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读