2012-08-12 20 views
7

Estoy en el proceso de configuración y la ruta de vuelo totalmente comprensión y entré en esta situación:reintentar una ruta migratoria fallado la migración

  • he configurado con éxito un nuevo proyecto para trabajar con la ruta de vuelo.
  • Migré con éxito una base de datos de prueba de la versión 0 a la 1.0.3.
  • La migración a la versión 1.0.4 no se pudo ejecutar. (. Yo estaba tratando de agregar la columna que ya estaba allí, no hay problemas hasta ahora, mi mal)

Sin embargo, una vez que hice los cambios necesarios en el guión correspondiente al trabajo, ruta migratoria siguió mostrando este mensaje:

Current schema version: 1.0.4 
com.googlecode.flyway.core.migration.MigrationException: Migration to version 1.0.4 failed! Please restore backups and roll back database and code! 

Como yo no quiero restaurar un volcado completo y aplicar toda migración de nuevo, sólo para hacer una escritura de modificación de tabla para trabajar, lo que finalmente lo hicieron fueron algunos cambios en la tabla 'SCHEMA_VERSION':

  • Primero borré la entrada de vers ión 1.0.4
  • segundo que defina el campo 'current_version' a 1 para la versión 1.0.3
  • Y luego ejecuta la ruta de vuelo: migrar comando de nuevo

Después de esto, la migración, finalmente, se aplicó y una El mensaje de éxito se muestra, sin embargo, no estoy muy seguro de si este es el enfoque correcto para tratar este tipo de situaciones. No estoy seguro si es correcto modificar la tabla 'esquema_versión' yo solo, ya que creo que solo debería modificarse por la propia ruta.

Así, después de explicar lo que me pasó, mi pregunta sería:

¿Hay una manera de 'reintento' para aplicar una migración fracasado en ruta de vuelo, sin modificar la tabla 'SCHEMA_VERSION' por mi cuenta?

¿Algún comando del que no tenga conocimiento para realizar esta tarea?

Respuesta

3

Esta es contestada en el FAQ: http://flywaydb.org/documentation/faq.html#repair

La próxima ruta migratoria 2.0 incluirá el comando de reparación. Este código ya está registrado en SCM.

Nota: Esto solo se aplica a la tabla de metadatos de Flyway. Usted sigue siendo responsable de limpiar cualquier otro efecto de una migración fallida.

Actualización: Flyway 2.0 ha sido lanzado. Usted puede agarrar en http://flywaydb.org

+0

que cubren más o menos mi duda , ¡muchas gracias! – pablocmg

+0

¿Qué significa "Sigue siendo responsable de limpiar cualquier otro efecto de una migración fallida". ¿medio? Quiero decir qué pasos tendría que hacer para limpiar una migración de creación de tabla fallida. –

+0

Eso depende de qué script de migración haga. Al igual que si deja caer algo, ¡no lo volverá a caer con éxito! – Piro

3

No sé si esto es una buena idea o no, pero se puede intentar hacer una reparación() si emigran() falla:

final Flyway flyway = new Flyway(); 
flyway.setBaselineOnMigrate(true); 
flyway.setValidateOnMigrate(false); 
flyway.setDataSource(dataSource()); 
try { 
    flyway.migrate(); 
} catch (final Exception e) { 
    logger.error("Flyway migration failed, doing a repair and retrying ..."); 
    flyway.repair(); 
    flyway.migrate(); 
} 
Cuestiones relacionadas