2012-04-03 11 views
6

de fragmentos de deploy.rbcómo establecer variables condicionales en deploy.rb de Capistrano

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

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

tengo 2 tareas como la anterior. Ahora, en lugar de ejecutar manualmente "cap prod1 deploy" o "cap prod2 deploy", quiero crear una tarea "prod" que establezca el "deploy_to" requerido en función de la existencia de un archivo en el servidor.

algo como:

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 

¿Cómo se hace eso?

Respuesta

10

puede hacerlo de esta manera:

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 

Esto va a hacer lo que necesita. Puede enganchar este método usando antes y después de enganches como este:

before :deploy, :set_deploy_to_location 
+0

¡Gracias que funciona! –

Cuestiones relacionadas