2013-07-21 83 views
5

Tôi đang cố gắng thực hiện di chuyển Flyway trên nhiều phiên bản (6 hoặc hơn) của máy chủ của chúng tôi. Mỗi cái được xây dựng và triển khai tự động từ Git bằng cách sử dụng Bamboo, vì vậy tôi thực sự muốn có thể sử dụng mục tiêu Maven flyway:migrate để mỗi máy chủ di chuyển chính nó khi nó được triển khai tiếp theo.Đường bay Maven init trước khi di chuyển

Tuy nhiên, tôi chỉ đang dùng thử Flyway ngay bây giờ, vì vậy không có DB nào hiện có là init 'd. Tôi tự hỏi là nó có thể cho tôi bằng cách nào đó xác định trong Maven rằng Flyway nên init nếu nó chưa có, và sau đó migrate mỗi lần?

Các migrate docs gợi ý rằng "bay theo trục sẽ tạo ra bảng siêu dữ liệu tự động nếu nó không tồn tại", nhưng trên thực tế khi mục tiêu flyway:migrate được thực thi, tôi nhận được thông báo lỗi:

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]

Trả lời

12

tôi không con số nó ra với Maven, kể từ khi tôi chuyển sang sử dụng API version với mùa xuân (mà có vẻ là tốt hơn trong tất cả các khía cạnh).

Ban đầu nó có cùng sự cố - init-method="migrate" của bean sẽ không thành công trên các lược đồ không trống, yêu cầu trước tiên phải gọi init. Tuy nhiên bằng cách nhìn vào nguồn gốc của Flyway đậu, tôi nhận thấy tôi chỉ có thể thiết lập initOnMigrate thành sự thật, và nó sẽ làm điều đó cho tôi. Tôi không chắc tại sao điều này không có trong tài liệu; nó không phải là tầm thường rõ ràng đối với một người không chơi xung quanh với đậu rất nhiều.

Dù sao, nếu bạn cũng có một sơ đồ không có sản phẩm nào về mà bay theo trục được phàn nàn, các hạt trong applicationContext.xml sẽ trông như thế này:

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

Cảm ơn bạn đã chỉ ra điều này. Bây giờ tôi đã mở rộng thông báo Ngoại lệ cho điều này "Sử dụng init() hoặc đặt initOnMigrate thành true để khởi tạo bảng siêu dữ liệu." –

0

Nếu bạn đang sử dụng lò xo khởi động, đặt điều này trong prop của bạn/yml nộp

flyway.initOnMigrate=true 

or 
flyway: 
    initOnMigrate: true 

Xin lưu ý: Hãy cẩn thận khi cho phép điều này vì nó loại bỏ các mạng lưới an toàn để đảm bảo - bay theo trục không di chuyển da sai tabase trong trường hợp lỗi cấu hình!

+0

liên kết đến cảnh báo "cẩn thận" https://flywaydb.org/documentation/maven/migrate tôi nghĩ trong phiên bản mới nhất thuộc tính này được gọi là "baselineOnMigrate" –

Các vấn đề liên quan