रूबी ऑन रेल्स: मैं रेक डीबी के साथ माइग्रेशन को कैसे वापस ला सकता हूं: माइग्रेट करें?


94

स्थापित करने के बाद MODEL उपयोगकर्ता i को यह मिला।

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

अब अगर मैं rb db करता हूं: माइग्रेट करें तो उपयोगकर्ता तालिका बनाई जाएगी।

मैं इस माइग्रेशन को वापस कैसे ला सकता हूं, अर्थात मैं रेक का उपयोग करके उपयोगकर्ता तालिका को कैसे हटा सकता हूं?

जवाबों:


147

निम्न आदेश चलाएँ

rake db:migrate:down VERSION=<version>

<version>आपकी माइग्रेशन फ़ाइल का संस्करण नंबर कहां है जिसे आप वापस करना चाहते हैं।

जैसे। यदि आप फ़ाइल नाम 3846656238_create_users.rb के साथ माइग्रेशन वापस करना चाहते हैं

रेक डीबी: माइग्रेट: डाउन संस्करण = 3846656238


मुझे मिल रहा है, UnknownMigrationVersionErrorलेकिन मुझे यह पता चल गया है कि मेरा माइग्रेशन अंदर है db/migrate/main, क्या किसी को इसके लिए एक विशिष्ट उपाय पता है db:migrate:downकि उस विशिष्ट निर्देशिका या माइग्रेट उपनिर्देशिका के अंदर देखना है?
tf.rz

यह सिर्फ 3 रेल के लिए है। मेरा जीवन रेल में है 2. इतना दुःख
morhook

@morhook यह रेल 3 के लिए भी काम करता है। डॉक्स की जाँच करें यहाँ गाइड्स
महेश

तुम सही हो! यह 2 रेल और 2 रेल के लिए काम करता है। 3. आपके इनपुट के लिए @Mahesh धन्यवाद!
morhook


65

मेरा मानना ​​है कि पलायन को रोकने के लिए तीन विकल्प उपलब्ध हैं (वे भी ओवरलैप करते हैं):

  1. सबसे हालिया प्रवास को नीचे रोल करें :

    rake db:migrate:down # रेल केवल 2

  2. हाल के पलायन के एक नंबर (एन) को रोल करें :

    rake db:rollback STEP=n

  3. पिछले, विशिष्ट संस्करण के लिए नीचे रोल करें :

    $ rake db:migrate:down VERSION=nnn # रेल 3 (संस्करण संख्या भी प्रदान करें)।

वर्जन नंबर का मतलब है SHA (सिक्योर हैश अल्गोरिथम) जो कि एक लंबी हेक्साडेसिमल संख्या है, जो 886af3194768917c78e की तरह दिखता है ... आप इसे करके देख सकते हैं git log

आप इन आदेशों (और अन्य) को उनके विवरणों के साथ देख सकते हैं rake -T db:जिनके उपयोग से रेल 3.2 में शामिल हैं:

rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false)
rake db:migrate:status  # Display status of migrations
rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n)

5
एक विशिष्ट संस्करण के लिए नीचे रोल करें :rake db:migrate VERSION=<version number>
Ajedi32

3
कम से कम रेल 3.0.20 के लिए, पहली कमांड गलत है। rake db:migrate:downत्रुटि संदेश "संस्करण आवश्यक है" के साथ एक एकल गर्भपात। की सिफारिश की rake db:rollback लेकिन काम करता है।
मार्टिन

जवाब में विस्तृत रूप से, केवल 2 पहले कमंड के लिए रेल।
माइकल डुरंट

1
पर्यावरण चर मामले संवेदनशील होते हैं इसलिए यह होना चाहिए STEPऔरVERSION
कोस्टा रोसिस

, स्पष्ट करने के लिए $ rake db:migrate:down VERSION=nnnनीचे रोल नहीं है करने के लिए एक संस्करण है, यह नीचे माइग्रेट करती संस्करण निर्दिष्ट।
जॉन्हेल

15

आप रोलबैक कर सकते हैं और निर्दिष्ट कर सकते हैं कि कितने अंतिम माइग्रेशन रोलबैक किए जाएंगे, उदा

rake db:rollback STEP=3

3 आखिरी पलायन के लिए।


यदि आप पिछले कुछ माइग्रेशन को पूर्ववत करना चाहते हैं, तो संस्करण संख्या देखने के बजाय यह अधिक तेज़ और आसान तरीका है
प्री-अल्फा

11

एक नए प्रोग्रामर के रूप में (या अन्य नए प्रोग्रामर के लिए)

rake db:rollbackलगभग आधा समय काम करता है। मैं वहीं से शुरू करता हूं।

अगर नहीं, rake db:migrate:down VERSION=3846656238

अपनी माइग्रेशन फ़ाइल के संस्करण संख्या के लिए संस्करण में प्लग करें जिसे आप वापस करना चाहते हैं।


10
rake db:migrate:redo

यह पिछले प्रवास को पूर्ववत और पुन: लागू करेगा।


5

रेल 5 के लिए हम उपयोग कर सकते हैं rails command instead of rake

rails db:migrate:down VERSION=<version>

उदाहरण

रेल डीबी: माइग्रेट: डाउन संस्करण = 20170330090327


2

अपने टर्मिनल में यह कमांड चलाएँ:

rake db:migrate:status

या

bundle exec rake db:migrate:status

यह स्थिति, माइग्रेशन आईडी, माइग्रेशन नाम, उन सभी माइग्रेशन को दिखाता है, जिन्हें हमने पहले चलाया था। अपनी माइग्रेशन आईडी (यानी आपका वर्जन नंबर) चुनें और उस आईडी को वर्जन = ,,, के बाद निम्न कमांड में डालें और एंटर दबाएं

bundle exec rake db:migrate:down VERSION=

0

माइग्रेशन कैसे रोल करें

(1) सबसे पहले माइग्रेशन आईडी को पहचानें

rake db:migrate:status

  • आईडी नंबर कॉपी करें।

वापस रोल करने के लिए माइग्रेशन को पहचानें।

(2) फिर माइग्रेशन को वापस रोल करें

rake db:migrate:down VERSION=20190802023239

  • संबंधित आईडी नंबर ऊपर चिपकाएं। बेशक, आपके मामले में, माइग्रेशन आईडी अलग होगा! सही माइग्रेशन आईडी का उपयोग करें।

....... और अब आप दौड़ से बाहर हो गए हैं!

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