2013-07-21 2 views
5

मैं अपने सर्वर के एकाधिक (6 या तो) उदाहरणों पर एक फ्लाईवे माइग्रेशन करने की कोशिश कर रहा हूं। प्रत्येक को बांस का उपयोग करके गिट से स्वचालित रूप से बनाया और तैनात किया जाता है, इसलिए मैं वास्तव में flyway:migrate मेवेन लक्ष्य का उपयोग करने में सक्षम होना चाहता हूं ताकि प्रत्येक सर्वर स्वयं तैनात होने पर स्वयं माइग्रेट हो सके।माइग्रेट करने से पहले फ्लाईवे मेवेन इनिट

हालांकि मैं अभी फ्लाईवे का प्रयास कर रहा हूं, इसलिए मौजूदा डीबी में से कोई भी init 'डी नहीं है। मुझे आश्चर्य है कि मेरे लिए किसी भी तरह मेवेन में निर्दिष्ट करना संभव है कि फ्लाईवे init होना चाहिए यदि यह पहले से नहीं है, और फिर migrate हर बार?

migrate docs सुझाव है कि "Flyway अगर यह मौजूद नहीं है मेटाडाटा तालिका स्वचालित रूप से पैदा करेगा", लेकिन तथ्य यह है जब 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

मैंने नहीं किया इसे मैवेन के साथ समझें, क्योंकि मैंने स्प्रिंग के साथ API version का उपयोग करने के लिए स्विच किया था (जो सभी मामलों में बेहतर प्रतीत होता है)।

प्रारंभ में यह एक ही समस्या थी - बीन का init-method="migrate" गैर-खाली स्कीमा पर असफल होगा, init को पहले कॉल किया जाना चाहिए। हालांकि फ्लाईवे बीन के स्रोत को देखकर, मैंने देखा कि मैं केवल initOnMigrate को सत्य पर सेट कर सकता हूं, और यह मेरे लिए यह करेगा। मुझे यकीन नहीं है कि यह दस्तावेज़ीकरण में क्यों नहीं है; यह किसी ऐसे व्यक्ति के लिए स्पष्ट रूप से स्पष्ट नहीं है जो बीन्स के साथ बहुत ज्यादा नहीं खेलता है।

वैसे भी, अगर आप भी एक गैर खाली स्कीमा के बारे में जो Flyway शिकायत कर रहा है है, applicationContext.xml में सेम इस तरह दिखना चाहिए: यदि आप वसंत-बूट का उपयोग कर रहे हैं, तो

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

इसे इंगित करने के लिए धन्यवाद। अब मैंने मेटाडेटा टेबल को आरंभ करने के लिए "इनिट() का उपयोग करें या initOnMigrate सेट करने के लिए अपवाद संदेश का विस्तार किया है।" –

0

, अपने प्रोप में रखते/YML फ़ाइल

flyway.initOnMigrate=true 

or 
flyway: 
    initOnMigrate: true 

कृपया ध्यान दें: सावधान जब इसे सक्षम के रूप में यह सुरक्षा तंत्र है कि यह सुनिश्चित करता है को हटा बनो - Flyway गलत दा माइग्रेट नहीं करती कॉन्फ़िगरेशन गलती के मामले में टैबस!

+0

"सावधान" चेतावनी से लिंक https://flywaydb.org/documentation/maven/migrate मुझे लगता है कि नवीनतम संस्करण में इस संपत्ति को "बेसलाइनऑन माइग्रेट" कहा जाता है। –

संबंधित मुद्दे