【问题标题】:Capistrano get list serversCapistrano 获取列表服务器
【发布时间】:2018-07-24 20:45:03
【问题描述】:

我需要编写一个任务,它只在每台服务器上执行一次行命令。 例如:

task :start_service do
  on servers do
    execute 'sudo svc -t /etc/my_service'
  end
end

我在 3.10.1 版本 gem 中的文档 http://www.rubydoc.info/gems/capistrano/toplevel 中搜索了它。但是 servers 方法在 Capistrano 中是未定义的。 看看我编造的)):

task :docker_start do
  servers = server('') # dirty hack to get all servers
  on servers do |h|
    next if h == ''
    execute 'sudo svc -t /etc/my_service'
  end
end

有没有办法在没有这种肮脏的黑客攻击的情况下做到这一点? 谢谢。

编辑: 我的my_stage.rb 是这样的:

server 'serv1', roles: %w(app role1 role2)
server 'serv2', roles: %w(app role2 db role3), primary: true

我想我可以为每个服务器添加一个特殊角色,例如:my_service:

server 'serv1', roles: %w(app role1 role2 my_service)
server 'serv2', roles: %w(app role2 db role3 my_service), primary: true

并将任务写为:

task :start_service do
  on roles :my_service do
    execute 'sudo svc -t /etc/my_service'
  end
end

但我认为这不是只为列表服务器添加新角色的真正方法。

【问题讨论】:

    标签: capistrano


    【解决方案1】:

    有一个特殊角色:all 匹配所有服务器。此外,您可以指定in: :sequence 以确保一次在一台服务器上执行(而不是默认的并行)。

    task :start_service do
      on roles(:all), in: :sequence do
        execute 'sudo svc -t /etc/my_service'
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2023-03-11
      • 2015-07-29
      • 2013-03-20
      • 2017-01-30
      • 1970-01-01
      相关资源
      最近更新 更多