एक डेटाबेस के लिए रेल ने किस माइग्रेशन को चलाया है, इसका ट्रैक कैसे रखता है?


93

रेल के अनुसार डॉक्टर: http://guides.rubyonrails.org/migrations.html

"सक्रिय रिकॉर्ड ट्रैक, जो माइग्रेशन पहले ही चलाए जा चुके हैं, इसलिए आपको बस इतना करना है कि अपने स्रोत को अपडेट करें और रेक db: रन करें।"

ActiveRecord वास्तव में यह कैसे करता है? सक्रिय रिकॉर्ड डेटा को कहां संग्रहीत करता है?

मुझे संदेह है कि यह डेटाबेस में ही संग्रहीत किया जा सकता है? एक टेबल में कहीं।

अपनी विकास मशीन पर, मैंने सभी माइग्रेशन चलाए। तब मैंने mysqldump का उपयोग करके उत्पादन डेटाबेस की प्रतिलिपि बनाई। फिर मैंने "रेक डीबी: माइग्रेट: स्टेटस" चलाया, यह सही ढंग से उन माइग्रेशन को दिखाता है जिन्हें उत्पादन डेटाबेस पर चलाने की आवश्यकता होती है।

मुझे लगता था कि ActiveRecord टाइमस्टैम्प का उपयोग करके अंतिम माइग्रेशन रन का ट्रैक रखता है। लेकिन मुझे लगता है कि यह सच नहीं है क्योंकि ActiveRecord एक अन्य कोड शाखा से विलय किए गए "पुराने" माइग्रेशन को सही ढंग से चलाता है।

इस विस्तृत ज्ञान के अंदर किसी के साथ हो सकता है? धन्यवाद


1
यह डेटाबेस में एक टेबल है जो ट्रैक रखता है, मेरा मानना ​​है।
जैक फ्रैंकलिन

जवाबों:


166

रेल आपके डेटाबेस में एक तालिका बनाता है जिसे schema_migrationsट्रैक करने के लिए कहा जाता है कि माइग्रेशन चला है।

तालिका एक एकल स्तंभ होता है, version। जब रेल एक माइग्रेशन चलाता है, तो यह माइग्रेशन के फ़ाइल नाम में अग्रणी अंक लेता है और उस "संस्करण" के लिए एक पंक्ति सम्मिलित करता है, यह दर्शाता है कि इसे चलाया गया है। यदि आप उस माइग्रेशन को वापस रोल करते हैं, तो रेल इसी पंक्ति को हटा देगी schema_migrations

उदाहरण के लिए, नाम की एक माइग्रेशन फ़ाइल चलाने से तालिका में 20120620193144_create_users.rbएक संस्करण के साथ एक नई पंक्ति सम्मिलित होगी ।20120620193144schema_migrations

आप पूर्व संस्करणों के साथ माइग्रेशन शुरू करने के लिए किसी भी बिंदु पर स्वतंत्र हैं। रेल हमेशा कोई नया माइग्रेशन चलाएगी, जिसके लिए एक संगत पंक्ति नहीं है schema_migrations। प्रमुख अंकों का टाइमस्टैम्प होना जरूरी नहीं है, आप अपने माइग्रेशन को कॉल कर सकते हैं 001_blah.rb। रेल के पहले के संस्करणों ने इस प्रारूप का उपयोग किया, और नए उत्पन्न प्रवासों के लिए अनुक्रमिक संख्या का उपयोग किया। बाद के संस्करणों ने कई डेवलपर्स को समान संख्या में स्वतंत्र रूप से माइग्रेशन उत्पन्न करने से रोकने के लिए टाइमस्टैम्प पर स्विच किया है।


विशेष रूप से उपयोगी है जब आप एक माउंटेन इंजन और एक डमी ऐप के मिश्रण का उपयोग कर रहे हैं
डोनाटो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.