मेरे पास निम्नलिखित माइग्रेशन फ़ाइल है db\migrate\20100905201547_create_blocks.rb
मैं विशेष रूप से उस माइग्रेशन फ़ाइल को कैसे रोलबैक कर सकता हूं?
मेरे पास निम्नलिखित माइग्रेशन फ़ाइल है db\migrate\20100905201547_create_blocks.rb
मैं विशेष रूप से उस माइग्रेशन फ़ाइल को कैसे रोलबैक कर सकता हूं?
जवाबों:
rake db:rollback STEP=1
ऐसा करने का एक तरीका है, अगर आप जिस माइग्रेशन को रोलबैक करना चाहते हैं वह अंतिम लागू है। आप उन सभी माइग्रेशनों के लिए 1 स्थानापन्न कर सकते हैं जो आप वापस जाना चाहते हैं।
उदाहरण के लिए:
rake db:rollback STEP=5
बाद में हुए सभी माइग्रेशन को रोलबैक भी करेगा (4, 3, 2 और 1 भी)।
लक्ष्य माइग्रेशन को वापस (और शामिल करने के लिए) सभी माइग्रेशन को रोल करने के लिए, उपयोग करें: (यह सही आदेश मूल पोस्ट में त्रुटि को इंगित करते हुए सभी टिप्पणियों के बाद जोड़ा गया था)
rake db:migrate VERSION=20100905201547
केवल एक विशिष्ट माइग्रेशन (आदेश के बाहर) को रोलबैक करने के लिए:
rake db:migrate:down VERSION=20100905201547
ध्यान दें कि यह किसी भी अंतरवर्ती पलायन को रोलबैक नहीं करेगा - केवल एक सूचीबद्ध। यदि वह ऐसा नहीं है जिसका आपने इरादा किया था, तो आप सुरक्षित रूप से चला सकते हैं rake db:migrate
और यह केवल उसी को फिर से चलाएगा, किसी भी अन्य को छोड़ देना जो पहले वापस नहीं लुढ़का था।
और यदि आप कभी भी किसी एकल माइग्रेशन को क्रम से बाहर करना चाहते हैं, तो इसका उलटा भी होता है db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
। मैंने एक बार ऐसा किया और यह पागल हो गया, सब कुछ वापस कर दिया। अच्छा नहीं है! यह रेल 4.2 थी - मुझे लगता है कि यह अब तक तय हो सकती है।
rake db:migrate:down VERSION=20100905201547
विशिष्ट फ़ाइल को वापस रोल करेगा।
सभी माइग्रेशन का संस्करण खोजने के लिए, आप इस कमांड का उपयोग कर सकते हैं:
rake db:migrate:status
या, माइग्रेशन के फ़ाइल नाम का उपसर्ग केवल वह संस्करण है जिसे आपको रोलबैक करने की आवश्यकता है।
माइग्रेशन पर रूबी ऑन रेल गाइड प्रविष्टि देखें ।
अंतिम माइग्रेशन को रोलबैक करने के लिए आप निम्न कार्य कर सकते हैं:
rake db:rollback
यदि आप किसी विशिष्ट माइग्रेशन को उस संस्करण के साथ रोलबैक करना चाहते हैं जो आपको करना चाहिए:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
उदाहरण के लिए यदि संस्करण 20141201122027 है, तो आप यह करेंगे:
rake db:migrate:down VERSION=20141201122027
उस विशिष्ट माइग्रेशन को रोलबैक करने के लिए।
आप rake db:rollback
विभिन्न विकल्पों का उपयोग करके अपने माइग्रेशन को रोलबैक कर सकते हैं। सिंटैक्स आपकी आवश्यकताओं के अनुसार अलग होगा।
यदि आप केवल अंतिम माइग्रेशन को रोलबैक करना चाहते हैं, तो आप या तो उपयोग कर सकते हैं
rake db:rollback
या
rake db:rollback STEP=1
यदि आप एक बार में माइग्रेशन का रोलबैक नंबर चाहते हैं, तो आप बस एक तर्क देते हैं:
rake db:rollback STEP=n
n
रोलबैक में माइग्रेशन की संख्या कहां है, नवीनतम माइग्रेशन से गिना जाता है।
यदि आप किसी विशिष्ट माइग्रेशन पर वापस जाना चाहते हैं, तो आपको निम्नलिखित में माइग्रेशन का संस्करण पास करना चाहिए:
rake db:migrate:down VERSION=xxxxx
जहाँ xxxxx प्रवासन का संस्करण संख्या है।
rake db:migrate:down VERSION=your_migrations's_version_number_here
संस्करण माइग्रेशन फ़ाइल नाम पर संख्यात्मक उपसर्ग है
संस्करण कैसे खोजें :
आपकी माइग्रेशन फ़ाइलें आपकी rails_root/db/migrate
निर्देशिका में संग्रहीत की जाती हैं । वह उपयुक्त फ़ाइल खोजें, जिसमें आप उपसर्ग संख्या को रोलबैक और कॉपी करना चाहते हैं।
उदाहरण के लिए
फ़ाइल का नाम: 20140208031131_create_roles.rb
फिर संस्करण है20140208031131
rake db:migrate:status
पिछला माइग्रेशन रोलिंग:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
n
पलायन की अंतिम संख्या को वापस लाना
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
एक विशिष्ट माइग्रेशन को वापस रोल करना
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
अंतिम माइग्रेशन को रोलबैक करने के लिए आप निम्न कार्य कर सकते हैं:
rake db:rollback
यदि आप किसी विशिष्ट माइग्रेशन को उस संस्करण के साथ रोलबैक करना चाहते हैं जो आपको करना चाहिए:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
यदि आप जिस माइग्रेशन फ़ाइल को रोलबैक करना चाहते हैं db/migrate/20141201122027_create_some_table.rb
, उसे कॉल किया गया था , तो उस माइग्रेशन के लिए संस्करण है 20141201122027
, जो उस माइग्रेशन को बनाते समय टाइमस्टैम्प है, और उस माइग्रेशन को वापस रोल करने का कमांड होगा:
rake db:migrate:down VERSION=20141201122027
किसी विशेष संस्करण (जैसे 20181002222222
) तक सभी माइग्रेशन को वापस रोल करने के लिए , उपयोग करें:
rake db:migrate VERSION=20181002222222
(ध्यान दें कि यह उपयोग करता है db:migrate
- db:migrate:down
इस प्रश्न के अन्य उत्तरों की तरह नहीं ।)
निर्दिष्ट माइग्रेशन संस्करण को वर्तमान संस्करण से पुराना मानते हुए, यह सभी माइग्रेशन को वापस रोल अप करेगा, लेकिन निर्दिष्ट संस्करण शामिल नहीं है।
उदाहरण के लिए, यदि rake db:migrate:status
प्रारंभ में प्रदर्शित होता है:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
चल रहा है:
rake db:migrate VERSION=20181002222222
में परिणाम होगा:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
संदर्भ: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
से रेल गाइड
आप revert
विधि का उपयोग करके माइग्रेशन रोलबैक करने के लिए सक्रिय रिकॉर्ड की क्षमता का उपयोग कर सकते हैं :
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
revert
विधि को भी उल्टा करने के लिए निर्देशों का एक ब्लॉक स्वीकार करता है। यह पिछले माइग्रेशन के चयनित भागों को वापस लाने के लिए उपयोगी हो सकता है। उदाहरण के लिए, आइए कल्पना करें कि CreateBlock प्रतिबद्ध है और बाद में यह निर्णय लिया गया है कि ज़िप रिकॉर्ड को सत्यापित करने के लिए, CHECK बाधा के स्थान पर, सक्रिय रिकॉर्ड सत्यापन का उपयोग करना सबसे अच्छा होगा।
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
एक ही माइग्रेशन को रिवर्ट का उपयोग किए बिना भी लिखा जा सकता था, लेकिन इसमें कुछ और चरण शामिल होंगे: create_table और प्रतिवर्ती के क्रम को उलट कर, drop_table द्वारा create_table की जगह, और अंत में नीचे और इसके विपरीत की जगह। यह सब वापस से ध्यान रखा है।
माइग्रेशन कमांड का उपयोग करके डेटाबेस की स्थिति को बदलते हैं
$ bundle exec rake db:migrate
हम एक एकल माइग्रेशन चरण का उपयोग पूर्ववत कर सकते हैं
$ bundle exec rake db:rollback
शुरुआत में वापस जाने के लिए, हम उपयोग कर सकते हैं
$ bundle exec rake db:migrate VERSION=0
जैसा कि आप अनुमान लगा सकते हैं, 0 संस्करण के लिए किसी अन्य संख्या को प्रतिस्थापित करने से उस संस्करण संख्या में माइग्रेट होता है, जहाँ संस्करण संख्या क्रमिक रूप से माइग्रेशन सूचीबद्ध करने से आती है
अच्छी तरह से रेल 5 में यह काफी आसान रेक डीबी है: माइग्रेट: स्टेटस या रेल्स डीबी: माइग्रेट: स्टेटस
इसे एक ही तरीके से संभालने के लिए संशोधित किया गया था, फिर बस वह संस्करण चुनें जिसे आप वापस रोल करना चाहते हैं और फिर रेक db चलाएं: VERSION = 2013424230423 माइग्रेट करें
सुनिश्चित करें कि संस्करण सभी बड़े अक्षर हैं
यदि आपको माइग्रेशन के किसी भी चरण के साथ कोई समस्या है या बीच में अटक गया है तो बस माइग्रेशन फ़ाइल पर जाएं और उन लाइनों पर टिप्पणी करें जो पहले से ही माइग्रेट थीं।
उम्मीद है की वो मदद करदे
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file