rails - Cómo hacer que Capistrano NO retroceda si una tarea falla
capistrano rails (1)
Estamos utilizando Capistrano / Webistrano (con la gema de despliegue sin barra de Lee Hambley) para impulsar nuestra aplicación PHP a los servidores de producción. Tengo algunas tareas personalizadas que se ejecutan durante varias partes del proceso de implementación.
Como ejemplo, tengo tareas que intentan detener y reiniciar una instancia de Soldado de amarre. 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, así 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í hay algunas partes relevantes de la secuencia de comandos de implementación:
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
de los documentos de tarea de Capistrano hay una configuración a la que puede agregar si hay un error para continuar.
task :solr_start, :on_error => :continue do
# your code here
end
Simplemente agregue eso a cada tarea que desee ignorar los errores y continúe. 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.