2011-01-25 14 views
34

Estamos usando Capistrano/Webistrano (con la gema de despliegue sin barra de Lee Hambley) para llevar nuestra aplicación PHP a servidores de producción. Tengo algunas tareas personalizadas que se ejecutan durante varias partes del proceso de implementación.Cómo hacer que Capistrano NO retroceda si falla una tarea

Como ejemplo, tengo tareas que intentan detener y reiniciar una instancia de solución de embarcadero. Sin embargo, a veces este bit falla durante el despliegue, por lo que Capistrano retrotrae todo el despliegue y vuelve a la revisión anterior. Esto es un dolor :-)

Me gustaría decirle a Capistrano que ignore el resultado de estas tareas, por lo que si fallan, Capistrano continúa su camino y termina el despliegue de todos modos. Es muy fácil para mí enviar ssh al servidor después del hecho y matar y reiniciar correctamente la instancia de Solr, en lugar de tener que hacer una implementación completa nuevamente.

Aquí es algunas partes pertinentes de la secuencia de comandos de despliegue:

before "deploy:symlink", :solr_kill 
after "deploy:symlink", :solr_start, :solr_index 

task :solr_kill do 
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill" 
end 

task :solr_start do 
    run "cd #{current_path}/Base ; #{sudo} phing solr-start" 
    run "sleep 10" 
end 

task :solr_index do 
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron" 
end 

Respuesta

32

del Capistrano Task docs hay una configuración que puede agregar a si hay un error, para continuar.

task :solr_start, :on_error => :continue do 
    # your code here 
end 

Simplemente agregue que a cada tarea que desea ignorar los errores y continuar. Sin embargo, lo mejor es ver si puede averiguar qué está causando la falla y hacer que el comando de reinicio sea más robusto para realmente reiniciarlo. Solo digo esto, ya que cuando intentas entregar el script a alguien más, es posible que no sepan exactamente cómo decir si se reinició correctamente.

+0

Gracias, Chris. Mis tareas son para siempre un trabajo en progreso, pero esto ayudará hasta que tenga la oportunidad de mejorarlas lentamente para hacer un mejor manejo de errores. – TravellingGuy

+7

¿Hay alguna otra forma de hacer esto? ¿Qué sucede si quiere detenerse en un error e inspeccionar el estado? –

+31

Una forma de inspeccionar el estado: ejecutar 'cap -d deploy'. El -d es para "depurar", lo que significa que Capistrano hará una pausa antes de ejecutar cada tarea y le pedirá que continúe o aborte. Cuando llegue al comando que desea depurar simplemente no responda el mensaje, abra una nueva pestaña/ventana de terminal y SSH a su servidor de implementación y realice la depuración :) – Bendihossan

Cuestiones relacionadas