部署期间Capistrano的服务器特定详细信息

时间:2011-05-23 16:08:10

标签: capistrano

我有很多服务器运行相同的代码,我想用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]。

1 个答案:

答案 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
相关问题