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