2013-09-30 6 views
19

मेरे रेल 4 ऐप में मैं अपनी माइग्रेशन फ़ाइलों को एक बड़ी फ़ाइल (schema.rb के समान) में पतन करना चाहता हूं क्योंकि यह कुछ हाउसकीपिंग करने का समय है लेकिन मुझे यकीन नहीं है कि तालिका में कैसे पहुंचना है डेटाबेस जो माइग्रेशन डेटा संग्रहीत करता है ताकि जब मैं माइग्रेशन चलाता हूं तो मुझे कोई त्रुटि/विवाद नहीं मिलता है।स्कीमा माइग्रेशन टेबल

प्रश्न माइग्रेशन डेटा संग्रहीत करने वाले तालिका में डेटा को कैसे एक्सेस और हटा सकता है?

+0

आप प्रतिलिपि की कोशिश की है/एक प्रवास फ़ाइल में 'schema.rb' फ़ाइल चिपकाने? –

+0

मुझे एकल माइग्रेशन फ़ाइल बनाने में कोई समस्या नहीं है - लेकिन अगर मैं डीबी पर विचार किए बिना माइग्रेशन फ़ाइलों को बदलता हूं तो मुझे माइग्रेशन के दौरान त्रुटियां मिलेंगी। – tommyd456

+0

मेरी वर्तमान समझ यह है कि आप एक ऐसी फाइल चाहते हैं जो आपके सभी माइग्रेशन स्टोर करे, ताकि आप इसे साफ़ कर सकें? यदि ऐसा है, तो मैं उनके माध्यम से लूपिंग और डेटा को एक नई फ़ाइल में लिखने का सुझाव दूंगा। 'फाइल'' .glob' आदि जैसी विधियों का उपयोग ... –

उत्तर

7

schema_migrations तालिका में संशोधन संख्याएं हैं; आखिरी रिकॉर्ड हाल ही में निष्पादित माइग्रेशन होने के साथ। आप मैन्युअल रूप से इन रिकॉर्ड्स को मैनिपुलेट कर सकते हैं।

+2

धन्यवाद - मेरे सवाल का कैसे मैं इस तालिका का उपयोग कर सकते है - मुझे क्या करना कंसोल का उपयोग करें? मैं सभी रिकॉर्ड्स को मिटाना चाहता हूं और फिर नया माइग्रेशन बनाना चाहता हूं - यह आवाज ठीक है? – tommyd456

+0

यदि इसे दोहराने की आवश्यकता नहीं है (यानी इनमें से कोई भी उत्पादन में नहीं है), तो मैं बस आपके डीबी शैल (psql या mysql, आदि) का उपयोग करता हूं और एक SQL क्वेरी चलाता हूं। – steakchaser

+0

यह psql है लेकिन – tommyd456

38

मनोरंजन के लिए, आप भी कंसोल में इन उनके लिए एक मॉडल वर्ग बनाकर हेरफेर कर सकते हैं ...

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end 

तो आप SchemaMigration.all, SchemaMigration.last.delete, आदि कर सकते हैं

सच सिर्फ एसक्यूएल का उपयोग कर के लिए एक विकल्प है, और यह कैसे करना है :)

+1

यह काम करता है - उस कंसोल-इंस्टेंस में मॉडल बनाने के लिए बस उस कोड को रेल कंसोल में चलाएं। फिर आप उस तालिका से पंक्तियों का चयन कर सकते हैं। कहीं (: version => ...) और आवश्यकतानुसार माइग्रेशन के संदर्भ हटाएं। बहुत उपयोगी है क्योंकि PGAdmin आपको उन तालिकाओं से पंक्तियों को हटाने नहीं देगा जिनके पास गुई के साथ निर्दिष्ट प्राथमिक कुंजी नहीं है। – JosephK

8

एक अन्य समाधान करने के लिए हो सकता है देखने के लिए बहुत ही दुर्लभ है कि आप इस निम्न स्तर पर चारों ओर गंदगी करने की आवश्यकता होगी ... आम तौर पर एक बुरा विचार है, लेकिन अच्छा है इसे एक्सेस करें:

ActiveRecord::SchemaMigration 

डेविड द्वारा दिए गए उत्तर मेरे संदर्भ में काम नहीं करते थे।

2

सुनिश्चित नहीं हैं कि तुम क्यों ऐसा करना चाहते हैं, लेकिन यहाँ तुम जाओ:

ActiveRecord :: Migrator.get_all_versions

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