Capistrano 获取列表服务器
Capistrano get list servers
我需要编写一个任务,在每台服务器上只执行一次一行命令。
例如:
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
但我认为只为列表服务器添加新角色并不是真正的方法。
有一个匹配所有服务器的特殊角色:all
。此外,您可以指定 in: :sequence
以确保一次在一台服务器上执行(而不是并行,默认情况下)。
task :start_service do
on roles(:all), in: :sequence do
execute 'sudo svc -t /etc/my_service'
end
end
我需要编写一个任务,在每台服务器上只执行一次一行命令。 例如:
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
但我认为只为列表服务器添加新角色并不是真正的方法。
有一个匹配所有服务器的特殊角色:all
。此外,您可以指定 in: :sequence
以确保一次在一台服务器上执行(而不是并行,默认情况下)。
task :start_service do
on roles(:all), in: :sequence do
execute 'sudo svc -t /etc/my_service'
end
end