2013-07-21 19 views
5

Sto provando a eseguire una migrazione Flyway su più (6 o più) istanze del nostro server. Ognuno è costruito e distribuito automaticamente da Git usando Bamboo, quindi mi piacerebbe davvero essere in grado di usare l'obiettivo Maven flyway:migrate in modo che ogni server migra da solo quando viene distribuito.Flyway Maven init prima della migrazione

Tuttavia, sto provando Flyway ora, quindi nessuno dei DB esistenti è stato init d. Mi chiedo se è possibile che in qualche modo specifichi in Maven che Flyway dovrebbe init se non lo ha già fatto, e quindi migrate ogni volta?

Il migrate docs suggeriscono che "Flyway creerà automaticamente la tabella dei metadati, se non esiste", ma in realtà quando viene eseguito l'obiettivo flyway:migrate, ottengo l'errore:

Failed to execute goal com.googlecode.flyway:flyway-maven-plugin:2.2:migrate (default) on project mutopia-server: Flyway Error: com.googlecode.flyway.core.api.FlywayException: Found non-empty schema "public" without metadata table! Use init() first to initialize the metadata table. -> [Help 1]

risposta

12

non l'ho fatto capirlo con Maven, da quando sono passato a usare lo API version con Spring (che sembra essere migliore sotto tutti gli aspetti).

Inizialmente aveva lo stesso problema: il bean init-method="migrate" non funzionava con gli schemi non vuoti, richiedendo prima init. Tuttavia, osservando la fonte del bean Flyway, ho notato che potevo semplicemente impostare initOnMigrate su true, e lo farebbe per me. Non sono sicuro del motivo per cui questo non è nella documentazione; non è banalmente ovvio per qualcuno che non gioca molto con i fagioli.

In ogni caso, se avete anche uno schema non vuota su cui Flyway si lamenta, il fagiolo in applicationContext.xml dovrebbe essere simile a questo:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="initOnMigrate" value="true" /> 
</bean> 
+2

Grazie per aver segnalato questo. Ho ora esteso il messaggio Exception a "Use init() o imposta initOnMigrate su true per inizializzare la tabella dei metadati". –

0

Se si utilizza la primavera-boot, mettere questo nel vostro prop/yml il file

flyway.initOnMigrate=true 

or 
flyway: 
    initOnMigrate: true 

si prega di notare: essere attenti quando si attiva questo in quanto elimina la rete di sicurezza che assicura - Flyway non migra il da sbagliata tabase in caso di errore di configurazione!

+0

collegamento a "attento" avviso https://flywaydb.org/documentation/maven/migrate penso che nell'ultima versione questa proprietà si chiami "baselineOnMigrate" –

Problemi correlati