2012-08-12 19 views
7

Sono solo in fase di configurazione e flyway completamente la comprensione e sono entrato in questa situazione:Riprovare un flyway fallito migrazione

  • Ho configurato con successo un nuovo progetto di lavorare con flyway.
  • Ho migrato con successo un database di test dalla versione 0 alla 1.0.3.
  • Impossibile eseguire la migrazione alla versione 1.0.4. (. Stavo cercando di aggiungere colonna che era già lì, nessun problema fino ad ora, il mio cattivo)

Tuttavia, una volta che ho fatto le modifiche necessarie allo script corrispondente per lavorare, flyway mantenuto mostrando questo messaggio:

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! 

Dal momento che non volevo per ripristinare un dump completo e applicare di nuovo ogni migrazione, solo per fare uno script ALTER tABLE di lavorare, quello che ho finalmente fatto sono stati alcuni cambiamenti alla tabella 'SCHEMA_VERSION':

  • 1 ° Ho cancellato la voce per vers ione 1.0.4
  • secondo ho impostato il campo 'current_version' a 1 per la versione 1.0.3
  • e quindi eseguito il flyway: migrate comando di nuovo

Dopo questo, la migrazione, infine, è stato applicato e mostrato il messaggio di successo, tuttavia non sono sicuro che questo sia l'approccio giusto per affrontare una situazione simile. Non sono sicuro che abbia il diritto di modificare da solo la tabella 'schema_version', poiché penso che dovrebbe essere modificata solo dal flyway stesso.

Così, dopo aver spiegato cosa è successo a me, la mia domanda sarebbe:

C'è un modo per 'tentativi' di applicare una migrazione non riuscita in flyway, senza modificare la tabella 'SCHEMA_VERSION' da solo?

Qualsiasi comando di cui non sono a conoscenza per eseguire questa operazione?

risposta

3

questo è risolta FAQ: http://flywaydb.org/documentation/faq.html#repair

L'imminente Flyway 2.0 includerà il comando di riparazione. Questo codice è già stato controllato in SCM.

Nota: si tratta solo della tabella dei metadati di Flyway. Sei ancora responsabile della pulizia di qualsiasi altro effetto di una migrazione fallita.

Aggiornamento: Flyway 2.0 è stato rilasciato. Si può afferrare al http://flywaydb.org

+0

che coprono più o meno il mio dubbio , Grazie mille! – pablocmg

+0

Cosa significa "Sei ancora responsabile della pulizia di qualsiasi altro effetto di una migrazione fallita". si intende? Intendo quali passi dovrei fare per ripulire una migrazione di creazione di tabelle fallita. –

+0

Dipende dallo script di migrazione. Come se qualcosa lascia cadere, non lo farà cadere di nuovo con successo! – Piro

3

Non so se questa una buona idea o no, ma si potrebbe provare a fare una riparazione() se migrate() ha esito negativo:

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(); 
} 
Problemi correlati