我有很多服务器运行相同的代码,我想用Capistrano部署不同的配置。服务器配置如下所示:
role(:server) { ["127.0.0.1", {:name => "mymachine1"}] }
role(:server) { ["127.0.0.2", {:name => "mymachine2"}] }
role(:server) { ["127.0.0.3", {:name => "mymachine3"}] }
问题是想要根据服务器名称创建符号链接,例如
task :setup_all_server do
find_servers(:roles => "server").each do |server|
server_name = server.options[:name]
run "mkdir -p #{deploy_to}/releases"
run "ln -s #{deploy_to}/current/scripts /home/#{user}/scripts"
run "ln -s #{deploy_to}/current/configuration/#{server_name} /home/#{user}/configuration"
end
end
设置和部署对所有服务器都非常有用,但如果我只想根据名称部署或设置一台服务器,有一种简单的方法吗?像
这样的东西cap deploy [:name=>"mymachine1337"]
或类似的东西: How to deploy to a single specific server using Capistrano
但是使用:name 的过滤器,在运行安装任务时不会丢失server.options [:name]。
答案 0 :(得分:0)
这是一种解决方法,而不是针对特定问题的解决方案。我最终使用Capistrano https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension的多级扩展,为每个安装配置了特定的配置,而不是每个环境的配置文件,例如。
/deploy/myinstallation.rb
set :config_folder, "myinstallation"
role(:server) { ["myuser@127.0.0.1"] }
这样可以运行:
cap myinstallation deploy:setup
cap myinstallation deploy