2013-04-24 5 views

उत्तर

111

जबकि @ ऑरलैंडोस की प्रतिक्रिया सही है, rake db:reset सभी माइग्रेशन को दोबारा नहीं करता है, और जैसा कि वह कहता है, अंतिम स्कीमा से डेटा लोड करता है। आप सभी माइग्रेशन पूर्ववत और फिर फिर से करना उन्हें चाहते हैं, आप का उपयोग करना चाहिए:

rake db:migrate:reset #runs db:drop db:create db:migrate 

आपको इस पोस्ट के बारे में अधिक जानकारी देख सकते हैं: Difference between rake db:migrate db:reset and db:schema:load

+8

असली सही उत्तर है –

+3

यह उत्तर भ्रम से बचने के लिए चुना जाना चाहिए। –

+0

'रेक डीबी: माइग्रेट: रीसेट 'वास्तव में किसी माइग्रेशन को रोलबैक नहीं करता है, यही सवाल वास्तव में पूछ रहा है। –

14

बस rake db:reset का उपयोग करें, जो आपके डेटाबेस को छोड़ देगा (सभी माइग्रेशन को पूर्ववत करने के समान) और अंतिम स्कीमा पर रीसेट करें।

अद्यतन: एक और सही दृष्टिकोण rake db:migrate:reset का उपयोग करेगा। यह डेटाबेस को छोड़ देगा, इसे फिर से बनाएगा और नवीनतम स्कीमा पर रीसेट करने के बजाय सभी माइग्रेशन चलाएगा।

+8

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

+0

@ एलेक्स फाल्के को इस प्रश्न का सही जवाब मिला है। – Qasim

+0

@Qasim उत्तर अपडेट किया गया :) – Orlando

16

यदि आप वास्तव में चाहते हैं रोलबैक माइग्रेशन की सभी, और न सिर्फ एक प्राचीन राज्य के लिए डेटाबेस ले सकते हैं या पिछले स्कीमा के लिए, आप चलाने के लिए है:

rake db:migrate VERSION=0 

यह वास्तव में रोलबैक जाएगा नीचे सभी तरह से हर प्रवास और ensu फिर हर प्रवासन उलटा है।

अब आप जारी

rake db:migrate:status 

आपको लगता है कि सभी माइग्रेशन अभी भी देखते हैं देखेंगे लेकिन वे एक 'नीचे' (लागू नहीं) राज्य में हैं, तो।

अन्य आदेशों का संकेत देने वाले एक rake db:reset या rake db:drop (जैसे @Orlando या @Alex फालके द्वारा जवाब के रूप में) किसी भी रोलबैक नहीं करेंगे: कि, वे यह सुनिश्चित नहीं है कि हर प्रवास प्रतिवर्ती है।

इसके अलावा, rake db:drop चलाया नहीं जा सकता है, जबकि डेटाबेस को अन्य उपयोगकर्ताओं द्वारा एक्सेस किया जा रहा है, जबकि रोलबैक लाइव किया जा सकता है (भले ही इसे आम तौर पर अनुशंसित नहीं किया जाता है)। और आखिरी लेकिन कम से कम नहीं, डेटाबेस को छोड़ना और पुनर्निर्माण करना स्कीमा माइग्रेशन टेबल को भी हटा देगा: यदि कोई डेटाबेस छोड़ने के बाद rake db:migrate:status चलाता है, तो उसे जवाब दिया जाएगा "स्कीमा माइग्रेशन टेबल अभी तक मौजूद नहीं है" और इसमें कोई सुराग नहीं होगा जिसके बारे में माइग्रेशन लागू किया जा सकता है (जब तक कि वह इसे अभी तक जानता है या उन्हें सूचीबद्ध कर सकता है)।

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