2012-08-12 49 views
7

我和我來到了這個情況:重試飛路剛剛在配置和充分理解遷徙路線的過程中失敗的遷移

  • 我成功地配置一個新的項目,遷徙路線的工作。
  • 我成功遷移測試數據庫從0版本1.0.3。
  • 遷移到版本1.0.4未能執行。 (我想補充一點,已經在那裏了列,沒有問題,到目前爲止,我的壞)

但是,一旦我作出了相應的腳本進行必要的修改工作,遷徙路線一直顯示此消息:

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! 

由於我沒有想恢復一個完整的轉儲和重新申請每遷移,只是爲了讓一個ALTER TABLE腳本工作,我終於還是有了一些變化到「schema_version」表:

  • 1st我刪除了vers的條目離子1.0.4
  • 第二予設定「CURRENT_VERSION」字段爲1版本1.0.3
  • 然後執行的飛路:遷移命令再次

在此之後,在遷移最後施加和顯示成功信息,但我不太確定這是否是處理這種情況的正確方法。我不確定它是否有權自己修改'schema_version'表,因爲我認爲它只能由flyway自己修改。

所以,解釋什麼是發生在我身上後,我的問題是:

有沒有一種方式,以「重試」,以適用於飛行用一個失敗的遷移,而不會由我自己修改「schema_version」表?

的任何命令,我不知道要完成這項任務?

回答

3

這是回答在FAQ:http://flywaydb.org/documentation/faq.html#repair

即將遷飛2.0將包括修復命令。此代碼已被檢入到SCM中。

注:與遷飛路線的元數據表這隻交易。您仍負責清除遷移失敗的其他任何影響。

更新:遷飛2.0已經正式發佈。您可以在http://flywaydb.org

+0

這幾乎覆蓋我的疑問, 非常感謝你! – pablocmg 2012-08-13 14:51:23

+0

什麼是「你仍然負責清理遷移失敗的其他影響。」手段?我的意思是我需要執行哪些步驟來清理失敗的表創建遷移。 – 2017-06-30 15:04:52

+0

這取決於什麼遷移腳本。就像它掉落的東西一樣,它不會再次成功地丟棄它! – Piro 2017-09-08 08:47:20

3

抓住它,我不知道這是否是一個好主意或沒有,但你可以嘗試做了修復()如果遷移()失敗:

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