2015-01-21 1 views
0

Capistrano v3의 설정을 한 단계의 여러 서버에 구현하는 데 문제가 있습니다. 아니면 불가능한 것을 원합니다.Capistrano 3 다중 서버 지연 변수 무시

namespace :test do 
    task :run do 
    on roles(:all) do 
     print "\nenvcode:\n" 
     p fetch(:envcode) 
     print "\nglobal_var:\n" 
     p fetch(:global_var) 
     print "\nssh_options:\n" 
     p fetch(:ssh_options) 
     print "\nmain_domain_name:\n" 
     p fetch(:main_domain_name) 
    end 
    end 
end 

을 그리고 여기에 같은 무대에서 시뮬 서버에 정의하는 설정입니다 :

나는 deploy.rb에서 테스트 작업을 만든

은 다음과 같습니다

role :app, %w{ip1 ip2} 
role :web, %w{ip1 ip2} 
role :db, %w{ip1 ip2} 

set :main_domain_name, "#{fetch(:envcode)}.mytestdomain.com" 
set :global_var, 'foobar' 

set :ssh_options, -> do 
    { 
    user: 'userip0' 
    } 
end 

server 'ip1', 
    roles: %w{web db app}, 
    ssh_options: { user: 'userip1' }, 
    user: 'userip1', 
    envcode: "envip1", 
    dbname: 'userip1', 
    dbuser: 'userip1', 
    dbpass: 'password', 
    dbhost: 'localhost' 

server 'ip2', 
    roles: %w{web db app}, 
    ssh_options: { user: 'userip2' }, 
    user: 'userip2', 
    envcode: "envip2", 
    dbname: 'userip2', 
    dbuser: 'userip2', 
    dbpass: 'password', 
    dbhost: 'localhost' 

내가 실행 캡 스테이징 테스트 : 실행이 출력 결과는 카피 스트라노가 서버 우선 적용을 완전히 무시한다는 것을 의미합니다.

envcode: 
nil 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip0"} 
envcode: 
nil 

main_domain_name: 
".mytestdomain.com" 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip0"} 

main_domain_name: 
".mytestdomain.com" 

들려주고 싶어 :

envcode: 
envip1 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip1"} 
envcode: 
envip2 

main_domain_name: 
"envip1.mytestdomain.com" 

global_var: 
"foobar" 

ssh_options: 
{:user=>"userip2"} 

main_domain_name: 
"envip2.mytestdomain.com" 

나는 무엇인가 잘못하고있다, 또는, 내가이 서버 설정 어레이로 할 수있는 것에 대해 나의 이해가 틀린가?

답변

0

envcode은 서버의 속성이므로 값을 얻으려면 fetch 메서드를 사용할 수 없습니다.

namespace :test do 
    task :run do 
    on roles(:all) do |server| 
     puts "envcode: #{server.properties.fetch(:envcode)}\n" 
     puts "global_var: #{fetch(:global_var)}\n" 
     puts "ssh_options: #{server.properties.fetch(:ssh_options)}\n" 
     puts "main_domain_name: #{server.properties.fetch(:envcode)}.mytestdomain.com\n" 
    end 
    end 
end