2012-04-03 10 views
6

Snippet von setzen deploy.rbWie Bedingungsvariablen in Capistrano der deploy.rb

task :prod1 do 
    set :deploy_to, "/home/project/src/prod1" 
end 

task :prod2 do 
    set :deploy_to, "/home/project/src/prod2" 
end 

Ich habe 2 Aufgaben wie die oben genannten. Jetzt, anstatt manuell entweder "cap prod1 deploy" oder "cap prod2 deploy" auszuführen, möchte ich eine Aufgabe "prod" erstellen, die das erforderliche "deploy_to" basierend auf dem Vorhandensein einer Datei auf dem Server setzt.

so etwas wie:

task :prod do 
    if (A_FILE_IN_SERVER_EXISTS) 
    set :deploy_to, "/home/project/src/prod2" 
    else 
    set :deploy_to, "/home/project/src/prod1" 
end 

Wie kann ich das tun?

Antwort

10

Sie können das tun, wie folgt:

task :set_deploy_to_location do 
    if capture("[ -f /etc/passwd2 ] && echo '1' || echo '0'").strip == '1' 
    set :deploy_to, "/home/project/src/prod2" 
    else 
    set :deploy_to, "/home/project/src/prod1" 
    end 
    logger.info "set deploy_to = #{deploy_to}"  
end 

Dies wird tun, was Sie brauchen. Sie können diese Methode mit vor und nach Haken wie folgt haken:

before :deploy, :set_deploy_to_location 
+0

Danke das funktioniert! –