2012-02-10 6 views
5

मैं एक रेल 1.2.3 ऐप 3.2.1 को अपडेट कर रहा हूं।रेल 1.2.3 ऐप से अपग्रेड करते समय मैं माइग्रेशन कैसे अपडेट करूं?

मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं माइग्रेशन स्ट्रक्चर को रेल के नवीनतम संस्करण के साथ संगत होने के लिए कैसे अपडेट कर सकता हूं, ताकि आदर्श रूप से आप ऐप सेट करते समय rake db:migrate चला सकें। वर्तमान में, मैंने जो भी माइग्रेशन चलाने की आवश्यकता है, उसके बारे में मैंने rake db:migrate:up VERSION=[version_number] करके इसे हल किया है। अगर मैं सिर्फ rake db:migrate चलाता हूं, तो यह शुरुआत से सभी माइग्रेशन को फिर से चालू करने का प्रयास करता है और यह बंद हो जाता है (क्योंकि उन माइग्रेशन पहले से ही डीबी डंप में चलाए जा चुके हैं)।

ऐप में माइग्रेशन , 002_add_some_other_model.rb20120209182512_add_some_model.rb के बजाय इस तरह दिखता है।

क्या किसी के पास इसका कोई अनुभव है? मैं इसे कैसे ठीक करूं?

+6

वाह 1.2.3 से 3.2.1 तक वाह। शुभकामनाएं ... – lucapette

+0

@ लुकपेट धन्यवाद! यह बहुत कुछ किया गया है, मैं बस चल रहा माइग्रेशन अधिक प्राकृतिक बनाना चाहता हूँ। – jfedick

+0

जिस समाधान को मैंने अक्सर देखा है वह है "माइग्रेशन छोड़ना और शुरुआती बिंदु के रूप में एक नया बनाएं" – lucapette

उत्तर

7

मुझे लगता है कि आप आपके माइग्रेशन पुनः आरंभ करना चाहिए, सभी माइग्रेशन आप ड्रॉप और अपने वर्तमान मॉडल की परिभाषा के साथ एक नया माइग्रेशन पैदा करते हैं। एक प्रारंभिक उदाहरण के रूप में this migration देखें।

2

एक अद्यतित रेल 3 ऐप में भी एक नया डेटाबेस स्थापित करने के लिए सभी माइग्रेशन चलाने की अनुशंसा नहीं की जाती है। यह db/schema.rb में समझाया गया है: इस schema.rb परिभाषा अपने डेटाबेस स्कीमा के लिए आधिकारिक स्रोत है

ध्यान दें कि। यदि आपको सिस्टम पर एप्लिकेशन डेटाबेस बनाने की आवश्यकता है, तो आपको डीबी: स्कीमा: लोड का उपयोग करना चाहिए, सभी माइग्रेशन स्क्रैच से नहीं चलाना चाहिए। उत्तरार्द्ध एक दोषपूर्ण और अस्थिर दृष्टिकोण है (अधिक माइग्रेशन आप एकत्र होंगे, जितना धीमा होगा उतना धीमा होगा और मुद्दों के लिए अधिक संभावना होगी)।

0

सुझाए गए सुझावों के बजाय, मैं स्क्रैच से नए माइग्रेशन बनाएगा। वर्तमान स्थिति में अपने सभी मॉडलों को शुरू करें और उनमें से प्रत्येक के लिए नए माइग्रेशन बनाएं, इस तरह आप बाद में माइग्रेशन की शक्ति का उपयोग कर सकते हैं, जैसे किसी तालिका में कॉलम जोड़ना या कॉलम प्रकार बदलना।

यदि आप अपने सभी मॉडलों के लिए गायन माइग्रेशन बनाते हैं, तो like has been suggested आप माइग्रेशन नाम में मॉडल ट्रैक खो देंगे।

यह करने का यह एक और तरीका है और अपनी दृष्टि को दर्शाता है।

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