7

मुझे एक समस्या आई, जहां मैं रेल परियोजना पर दो शाखाओं पर काम कर रहा था और प्रत्येक प्रोजेक्ट में कॉलम जोड़ने के लिए माइग्रेशन होता है। उस समय, rake db:migrate:reset एक समस्या का कारण बनता है और मैं अपने डेटाबेस की स्थिति का सही ढंग से प्रतिनिधित्व करने के लिए पूरी तरह से अपने schema.rb पर भरोसा करता हूं। एक बिंदु पर, मुझे एक समस्या आई, जहां शाखा ए द्वारा जोड़ा गया एक स्तंभ शाखा बी की स्कीमा में आया। चूंकि migrate:reset कोई विकल्प नहीं था, इसलिए मैंने स्कीमा फ़ाइल को मैन्युअल रूप से संपादित करने का सहारा लिया। मैंने इस बदलाव को मूल रूप से शाखा ए से कॉलम हटा दिया है जिसे मुझे शाखा बी की schema.rb में आवश्यकता नहीं थी।क्या रेलवे में स्कीमा.आरबी मैन्युअल रूप से संपादित करने के लिए सुरक्षित माना जाता है

समस्या के बाद आया कि मैंने शाखा ए को मास्टर में विलय कर दिया है। जब मैंने शाखा बी को मास्टर करने के लिए रीबेज करने का प्रयास किया, तो स्कीमा फ़ाइल में कॉलम को हटाने के लिए बी में अभी भी प्रतिबद्धता थी (जो अब मास्टर में है क्योंकि यह प्रासंगिक है)। गिट ने इसके लिए कोई संघर्ष नहीं देखा और इसे स्वतः विलय कर दिया। मेरे रिबेस के अंत में, मैंने पाया कि मेरी स्कीमा मास्टर में जो कुछ है उसके साथ असंगत है।

मेरा फ़िक्स स्कीमा फ़ाइल को फिर से संपादित करना है और पहले हटाए गए कॉलम को स्कीमा फ़ाइल में मैन्युअल रूप से जोड़ना है। मेरा सवाल है: क्या यह अपरंपरागत माना जाता है? खतरनाक? hacky?

अभी इसमें एक कॉलम शामिल है, लेकिन यदि इसमें कई स्तंभ हटाना/जोड़ (खतरनाक?) समाधान शामिल है तो अधिक समस्याएं और डीबी/schema.rb असंगतता हो सकती है।

उत्तर

6

इसे आमतौर पर schema.rb फ़ाइल को संपादित करने के लिए एक खराब अभ्यास माना जाता है।

Rails Guide on Migrations के अनुसार:

माइग्रेशन, पराक्रमी वे हो सकता है, अपने डेटाबेस स्कीमा के लिए आधिकारिक स्रोत नहीं हैं। वह भूमिका या तो डीबी/schema.rb या एक SQL फ़ाइल में आता है जो सक्रिय रिकॉर्ड डेटाबेस की जांच करके उत्पन्न करता है। उन्हें संपादित करने के लिए डिज़ाइन नहीं किया गया है, वे केवल डेटाबेस की वर्तमान स्थिति का प्रतिनिधित्व करते हैं।

ध्यान दें कि डाटाबेस चल: स्कीमा: डंप कार्य है, जो आपके db/स्कीमा अद्यतन करेगा भी विस्थापित डाटाबेस का आह्वान

schema.rbहर बार जब आप एक नया माइग्रेशन चलाने अद्यतन हो जाता है। अपने डेटाबेस की संरचना से मेल खाने के लिए आरबी फ़ाइल।

मैं सिर्फ बातें सुलझा और schema.rb फ़ाइल ट्रैक पर वापस आने और माइग्रेशन का नवीनतम सेट अप करने के लिए सही करने के लिए कुछ समय बिताने की सलाह देते हैं।

+0

सहमत हुए। आप संभावित रूप से "रेक डीबी: माइग्रेट वर्जन = xxx" की उपयोगिता को खो रहे हैं और आरक्षण को छोड़कर और schema.rb को मैन्युअल रूप से संपादित करके भावी सिरदर्द बना रहे हैं। – railsdog

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