रेल 3 में माइग्रेशन फ़ाइलों को कैसे हटाएं


109

मैं एक माइग्रेशन फ़ाइल हटाना / हटाना चाहूंगा। मुझसे यह कैसे होगा? मुझे पता है कि यहां भी इसी तरह के सवाल हैं लेकिन एक अद्यतन के रूप में, क्या स्क्रिप्ट / विनाश करने से बेहतर तरीका है?

साथ ही, क्या मुझे माइग्रेशन हटाना / हटाना चाहिए db:resetया नहीं db:drop?

जवाबों:


142

मैं आमतौर पर:

  1. rake db:migrate VERSION=XXXमेरे द्वारा हटाए जाने से पहले संस्करण पर, सभी वातावरणों पर प्रदर्शन करें ।
  2. माइग्रेशन फ़ाइल को मैन्युअल रूप से हटाएं।
  3. यदि लंबित माइग्रेशन हैं (यानी, मैंने जो माइग्रेशन हटाया था वह अंतिम नहीं था), मैं अभी एक नया प्रदर्शन करता हूं rake db:migrate

यदि आपका आवेदन पहले से ही उत्पादन या मंचन पर है, तो यह केवल एक और प्रवास लिखना सुरक्षित है जो आपकी तालिका या स्तंभों को नष्ट कर देता है।

माइग्रेशन के लिए एक और महान संदर्भ है: http://guides.rubyonrails.org/migrations.html


2
माइग्रेशन हटाना और फिर db चलाना: माइग्रेट किए गए टेबल को मिटा देंगे?
alvincrespo

2
नहीं, चूंकि रेल को यह नहीं पता होगा कि इसे कैसे हटाया जाए। यह self.downआपके डेटाबेस को "डाउनग्रेड" करने के लिए आपके प्रवास पर परिभाषित विधि को कॉल करने की आवश्यकता है ।
फैबियो बतिस्ता

35
यदि आपने पहले ही फाइल को डिलीट कर दिया है, तो बिना एहसास के रेल आसानी से नहीं जाने rake db:migrate:statusदेगी , आपको गुम फाइल की आईडी दिखाएगी, जिसे आप इसे फिर से बनाने के लिए उपयोग कर सकते हैं। एक बार वापस आने के बाद, आप जीत के लिए इस उत्तर की सलाह का पालन कर सकते हैं।
जॉर्डन फेल्डस्टीन

1
@ जोर्डनफेल्डस्टीन, धन्यवाद। db:migrate:statusएक जीवन रक्षक है!
dee

1
@ लुकास, एक बार माइग्रेशन फ़ाइल हटा दिए जाने के बाद, इसे अब और नहीं बदला जा सकता है। इसलिए आपको इसकी फ़ाइल को हटाने से पहले इसे पहले से ही चलाए गए सभी उत्पादन (उत्पादन, विकास, परीक्षण, मंचन आदि) पर वापस करना होगा। इसलिए मैंने यह भी लिखा है कि पहले से ही उत्पादन पर चलने के बाद, उस पुराने को वापस करने के लिए सिर्फ एक और प्रवास बनाना सुरक्षित है।
फैबियो बतिस्ता

68

माइग्रेशन हटाने का दूसरा तरीका:

$ rails d migration SameMigrationNameAsUsedToGenerate

rake db:migrateनिष्पादित होने से पहले इसका उपयोग करें क्योंकि डेटाबेस में परिवर्तन हमेशा के लिए रहेगा :) - या मैन्युअल रूप से परिवर्तन हटा दें


3
"यदि आपका आवेदन पहले से ही उत्पादन या मंचन पर है, तो यह केवल एक और प्रवास लिखना सुरक्षित है जो आपकी तालिका या स्तंभों को नष्ट कर देता है।" इसलिए परिवर्तन डेटाबेस में हमेशा के लिए नहीं रहते
JohnMerlino

8
वैसे, "डी" का अर्थ "नष्ट" करना है।
ग्रेग एम। क्रसक

21

एप्लिकेशन के होम डायरेक्टरी से नीचे कमांड चलाएं:

  1. rake db:migrate:down VERSION="20140311142212" (यहाँ संस्करण टाइमस्टैम्प है जिसे रेल द्वारा पूर्वगामी बनाया गया था जब माइग्रेशन बनाया गया था। यह कार्रवाई इस माइग्रेशन के कारण DB परिवर्तनों को वापस ले जाएगी)

  2. Run "rails destroy migration migration_name"(माइग्रेशन बनाते समय माइग्रेशन_नाम का उपयोग किया जाता है, इसे प्राप्त करने के लिए अपने माइग्रेशन फ़ाइल नाम से " टाइमस्टैम्प_ " निकालें )


रेक को नष्ट माइग्रेशन AddFileToTable रेक निरस्त! कार्य 'को नष्ट' का निर्माण करने के लिए कैसे पता नहीं है (--trace साथ काम चलाकर पूर्ण ट्रेस देखें)
sadaf2605

3
# 2 के लिए सही कमांड है:rails d migration migration_name
mauriciomdea

1
"टाइमस्टैम्प_" को हटाने के लिए धन्यवाद कि मुझे क्या चाहिए
लाइटमैन


9

हम प्रयोग कर सकते हैं,

$ rails d migration table_name  

जिससे माइग्रेशन हट जाएगा।


1
मुझे लगता है कि यह टेबल_नाम के बजाय मॉडल का नाम होना चाहिए
अजीत खान

3

कभी-कभी मैंने खुद को माइग्रेशन फ़ाइल हटाते हुए पाया और फिर डेटाबेस से टेबल स्कीमा_मिग्रेशन पर संबंधित प्रविष्टि को हटा दिया। सुंदर नहीं है लेकिन यह काम करता है।


3

यह रेल 5 में भी काम करता है।

यदि माइग्रेशन सबसे हाल का था, तो आप डेटाबेस कॉलम को निकाल सकते हैं जो कि माइग्रेशन को जोड़कर किया गया है:

rake db:rollback

फिर माइग्रेशन फ़ाइल को चलाकर हटा दें:

rails d migration WhateverYourMigrationWasNamed.rb 


1

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

rails db:migrate:status

डीबी कंसोल में गुम पलायन और सिर के संस्करणों पर ध्यान दें:

rails dbconsole

अब मैन्युअल रूप से माइग्रेशन टेबल से संस्करण निकालें:

delete from schema_migrations where version='<version>';

अब आपको अच्छा होना चाहिए।


0

मुझे बस यही समस्या थी:

  1. रेल्स डी माइग्रेशन फ्यु -थिस ने अंतिम टाइमस्टैम्प के साथ माइग्रेशन को हटा दिया
  2. रेल डी प्रवास फ्यु -थिस ने अन्य प्रवासन को नष्ट कर दिया
  3. जाँच करने के लिए git स्टेटस का उपयोग करें जो कि अब अनट्रैक की गई फ़ाइलों पर नहीं है
  4. रेल जी प्रवास फू

उसने मेरे लिए इसे हल कर दिया


0

साइड नोट: रेल की शुरुआत 5.0.0 से rakeकी गई है, rails इसलिए निम्न प्रदर्शन करने के लिए इसे बदल दिया गया है

रेल db: माइग्रेशन VERSION = 0

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