2011-03-08 10 views
5

Estoy usando Capistrano para implementar una aplicación Rails. Estoy pensando en una situación en la que hubo cambios en la base de datos, por lo que simplemente no puedo cap deploy porque las migraciones deben ejecutarse antes de que se actualice el código. Me doy cuenta de que hay un cap deploy:migrations, pero eso es un poco más automático de lo que me gustaría. Me gustaría:Despliegue de Capistrano pero migraciones manualmente

  1. Introduzca el nuevo código en el directorio de lanzamientos, pero no actualice el enlace simbólico ni reinicie la aplicación.
  2. ssh en el servidor, ejecute rake:db_abort_if_pending_migrations para confirmar que las migraciones que quiero ejecutar son las únicas pendientes, luego ejecute rake db:migrate manualmente.
  3. Complete la implementación, actualice el enlace simbólico y reinicie la aplicación.

¿Hay alguna manera fácil de hacerlo con las tareas incorporadas de Capistrano, o tendré que escribir mis propios pasos de implementación para lograr esto?

Debo mencionar también que estoy pensando en casos (como la adición de columnas) donde la migración se puede ejecutar en una base de datos en vivo. Para cambios más destructivos, me doy cuenta de que tendría que cerrar el sitio con una página de mantenimiento durante el despliegue.

Respuesta

5

Probar:

  1. cap deploy:update_code

  2. Haz lo que ha descrito loging en el servidor de forma manual o por medio de cap shell

  3. cap deploy:symlink deploy:restart

Ver cap -e deploy:update_code deploy:symlink deploy:restart deploy:shell para más información.

Espero que esto sea útil para usted.

+0

¡Eso debería hacerlo, gracias! ¿Hay alguna documentación en algún lugar sobre el flujo de tareas en Capistrano (es decir, en qué subtareas se ejecuta 'cap event 'en qué orden)? – jrdioko

Cuestiones relacionadas