7

मेरे पास गिट पर कई शाखाएं हैं, इन शाखाओं में स्कीमा विभिन्न संस्करणों पर हैं। शाखा में स्विच करने के बाद new_feature (लंबित माइग्रेशन के साथ) कहें तो यदि मैं rake db:setup करता हूं तो यह मुझे लंबित माइग्रेशन चलाने के लिए सलाह देता है।रेक डीबी: गिराए गए टेबल के साथ schema.rb को अपडेट करना माइग्रेट करें

एक बार जब मैं ऐसा करता हूं कि मेरी स्कीमा उन तालिकाओं के साथ अपडेट हो जाती है जिन्हें उसी शाखा में हटा दिया गया था।

यदि मैं rake db:reset करता हूं तो यह ठीक काम करता है।

मुझे db:setup और db:reset के बीच का अंतर पता है। बाद में एक db:drop और फिर db:setup

करता है लेकिन सोच रहा हूँ क्यों स्कीमा दिखाता है यकीन है कि कुछ रेल ज्ञान w.r.t. याद आ रही है उन पर rake db:migrate

Am टेबल गिरा स्कीमा लोडिंग और माइग्रेशन प्रोसेस

कोई अंतर्दृष्टि बहुत मददगार होगी। अग्रिम धन्यवाद

उत्तर

5

ऐसा लगता है कि आपकी schema.rb गिट में चेक की गई है, जो एक अच्छी बात है। तो जब आप शाखाएं स्विच करते हैं, तो आपकी schema.rb आपकी वास्तविक डीबी स्कीमा से अलग होती है।

रेक डीबी: माइग्रेट केवल schema.rb में स्कीमा संस्करण की जांच करेगा और यदि डेटाबेस संस्करण छोटा है तो यह सभी "लंबित" माइग्रेशन चलाएगा। अगर माइग्रेशन चलाया जाता है तो यह केवल schema.rb फ़ाइल को पुन: उत्पन्न करता है।

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

तो यदि आप शाखाओं के बीच डेटा रखना चाहते हैं तो माइग्रेशन मानसिकता में काम करने के लिए आपके पास कुछ विकल्प हैं।

ए) शाखाओं के बीच आपको जो भी डेटा चाहिए, वह डीबी बीजों की फाइल में रहता है। फिर आप किसी भी चिंताओं के बिना अपना डीबी ड्रॉप/बना सकते हैं

बी) शाखाओं को स्विच करने से पहले अलग-अलग माइग्रेशन को वापस रोल करें। नई शाखा में उन्हें फिर से रोल करें।

सी) धोखा, और schema.rb हटाएं और रेक रन डीबी पुन: चलाएं: माइग्रेट करें। यह धोखाधड़ी है क्योंकि, यह आसानी से आपके संस्करण नियंत्रण में dataloss, असंगत schema.rb का कारण बन सकता है, और अन्य टीम के सदस्यों के लिए सिरदर्द का कारण बन सकता है क्योंकि आपके प्रवासन कोई समझ नहीं लेते हैं।

और सलाह का एक शब्द। यदि आपने इसे गिट करने के लिए प्रतिबद्ध किया है, तो पुरानी माइग्रेशन फ़ाइल को न बदलें। बस एक नया बनाओ। वे एक तार्किक ढेर बनाते हैं और क्रमशः आपकी स्कीमा को बदलने के लिए हैं।

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