2012-04-03 15 views
6

frammento da deploy.rbCome impostare le variabili condizionali in deploy.rb di Capistrano

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

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

Ho 2 compiti come sopra. Ora invece di eseguire manualmente "cap prod1 deploy" o "cap prod2 deploy", voglio creare un'attività "prod" che imposta il "deploy_to" in base all'esistenza di un file sul server.

qualcosa di simile:

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 

Come posso fare?

risposta

10

che si può fare in questo modo:

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 

Questo farà quello che vi serve. Puoi agganciare questo metodo usando ganci prima e dopo in questo modo:

before :deploy, :set_deploy_to_location 
+0

Grazie che funziona! –

Problemi correlati