2013-07-21 19 views
5

私は、私たちのサーバーの複数(6つ)のインスタンスでマイグレーションを実行しようとしています。それぞれがBambooを使用してGitから自動的にビルドされ、デプロイされるので、私は実際にflyway:migrate Mavenゴールを使用して、次のデプロイ時に各サーバが移行するようにしたいと考えています。マイグレーション前のマイグレーションマイグレーション

しかし、私は現在Flywayを試しているので、既存のDBのどれもinit 'dではありません。私は、Flywayが毎回、それからmigrateがなければMavenで何とか指定することが可能であると思っていますか?

migrate docsは「それが存在しない場合、フライウェイは、自動的にメタデータテーブルを作成する」ことを示唆しているが、flyway:migrate目標が実行された場合、実際に、私はエラーを取得:

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]

答えて

12

私はしませんでした私はSpringを使ってAPI versionを使用するように切り替えたので、Mavenでそれを理解してください(これはすべての面で優れているようです)。

最初は同じ問題がありました。つまり、init-method="migrate"は空でないスキーマでは失敗し、initが最初に呼び出される必要があります。しかし、Flyway beanのソースを見ると、私はinitOnMigrateをtrueに設定できることに気付きました。それは私のためです。なぜこれがドキュメントにないのか分かりません。豆をあまり味わっていない人にとっては自明ではありません。あなたはまた、フライウェイが不平を言っているかについての非空のスキーマを持っている場合

とにかく、applicationContext.xmlでBeanは次のようになります。

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

ありがとうございました。私は今この例外メッセージを "Use init()またはinitOnMigrateをtrueに設定してメタデータテーブルを初期化しました。" –

0

をあなたは春ブートを使用している場合は、あなたの小道具でこれを置きます/ YMLファイル

flyway.initOnMigrate=true 

or 
flyway: 
    initOnMigrate: true 

に注意してください:それは確実にセーフティネットを削除するとして、これを有効にするときは注意う - フライウェイは間違っダを移行しません設定ミスの場合のtabase!

+0

「注意深い」警告へのリンクhttps://flywaydb.org/documentation/maven/migrate私はこのバージョンの最新バージョンでは「baselineOnMigrate」と呼ばれています –

関連する問題