2011-01-31 12 views
5

हम थोड़ी देर के लिए Grails के साथ काम कर रहा हूँ और मेरी टीम का नेतृत्व Grails ORM (GORM) के बारे में कुछ सवाल उठाए:हम Grails में डेटाबेस स्कीमा कैसे माइग्रेट/अपडेट कर सकते हैं?

  1. हम डेटाबेस स्कीमा कैसे कायम रखूँ एक बार हम उत्पादन करने के लिए स्थानांतरित कर दिया?
  2. क्या हम Grails के साथ डेटाबेस स्कीमा अपडेट कर सकते हैं?
  3. यदि स्कीमा अपडेट किया गया है, तो क्या परिवर्तन स्वचालित रूप से प्रतिबिंबित होंगे/क्या ढांचा इसका ख्याल रखता है?
  4. क्या Grails के लिए कोई प्लगइन है जो हमें बिना सिरदर्द के स्कीमा को अपडेट करने की अनुमति देगा?

उत्तर

10

मैं हाल ही में डेटाबेस माइग्रेशन के लिए आधिकारिक Grails प्लगइन जारी - http://grails-plugins.github.com/grails-database-migration/docs/manual/index.html

पर http://grails.org/plugin/database-migration देख सकते हैं और डॉक्स मैं इस पर Liquibase के लेखक के साथ काम कर रहा हूँ, इसलिए प्लगइन liquibase पुराने अब पदावनत किया गया है और नया इस्तेमाल किया जाना चाहिए क्योंकि यह लिक्विबेस (2.0) के नवीनतम संस्करण का उपयोग करता है और आधिकारिक तौर पर स्प्रिंगसोर्स द्वारा समर्थित है। उनकी घोषणा के लिए http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html देखें।

(http://grails.org/Mailing+lists से पंजीकरण) या http://grails-plugins.847840.n3.nabble.com/ पर नए प्लगइन मंच Grails उपयोगकर्ता मेलिंग सूची पर उपयोग प्रश्न पूछें या सीधे लेखक ईमेल :)

+0

नया डीबी प्लगइन निश्चित रूप से सबसे अच्छा विकल्प है – leebutts

1

जबकि "ऑटो बिल्ड" कार्यक्षमता प्रोजेक्ट प्राप्त करने और चलाने के लिए ठीक है, मुझे liquibase डीबी अद्यतित रखने का सबसे अच्छा तरीका मिल गया है। एक grails plugin है और मेरा मानना ​​है कि काम डीएसएल पर भी चल रहा है।

तो, बेसलाइन स्कीमा बनाएं (आप तरल पदार्थ के जेनर-चेंजलॉग का उपयोग कर सकते हैं) फिर तरल पदार्थ के माध्यम से सभी भविष्य में परिवर्तन करें और यह आपके लिए अपडेट, रोलबैक और यहां तक ​​कि कुछ डीबी इंटरऑप का प्रबंधन करेगा। आप यह सत्यापित करने के लिए अपने DataSource.groovy config सेट कर सकते हैं और grails शुरू नहीं होगा यदि स्कीमा डोमेन config से मेल नहीं खाता:

environments { 
    development { 
     dataSource { 
      dbCreate = "validate" 

तुम भी आवेदन प्रारंभ होने पर आपके माइग्रेशन को चलाने के लिए liquibase-runner plugin में रुचि हो सकती।

+1

मैं अब बर्ट के डीबी प्लगइन की कोशिश की है और यह काफी बेहतर है - उपयोग कि ! –

4
  1. अपने उत्पादन वातावरण के लिए DataSource.groovy में dbCreate पैरामीटर निकालें - यह स्वत: अपडेट डीबी स्कीमा से GORM बंद हो जाएगा।

  2. निश्चित रूप से। LiquiBase plugin का उपयोग करें।

  3. GORM dbCreate='update' के साथ ऐसा कर सकता है, लेकिन इसकी दृढ़ता से अनुशंसा नहीं की जाती है। उदाहरण के लिए, यदि आप किसी फ़ील्ड का नाम बदलते हैं, तो GORM/LiquiBase यह निर्धारित नहीं कर सकता कि आपको डेटा माइग्रेट करना है, न केवल ड्रॉप + बनाना।

  4. एक पंक्ति में: grails db-diff LiquiBase के changelog.xml उत्पन्न करने के लिए, और grails migrate -Dgrails.env=<whatever environment> संबंधित डाटाबेस सर्वर पर लागू करने के लिए।

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