Ruby on Rails: Wie kann ich eine Migration mit rake db: migrate rückgängig machen?


94

Nach der Installation von devise MODEL User habe ich dies bekommen.

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

Wenn ich jetzt db: rake mache, wird die Benutzertabelle erstellt.

Wie kann ich diese Migration zurücksetzen, dh wie kann ich die Benutzertabelle erneut mit Rake löschen?

Antworten:


147

Führen Sie den folgenden Befehl aus

rake db:migrate:down VERSION=<version>

Wo <version>ist die Versionsnummer Ihrer Migrationsdatei, die Sie zurücksetzen möchten?

z.B. Wenn Sie eine Migration mit dem Dateinamen 3846656238_create_users.rb zurücksetzen möchten

Rake db: migrate: down VERSION = 3846656238


Ich bekomme eine, UnknownMigrationVersionErroraber ich habe herausgefunden, dass meine Migrationen darin enthalten sind. Kennt db/migrate/mainjemand eine Problemumgehung, db:migrate:downum in diesem bestimmten Verzeichnis oder in den Unterverzeichnissen für die Migration nachzuschauen?
tf.rz

Dies gilt nur für Schienen ab 3. Mein Leben ist in Schienen 2. So traurig
Morhook

@morhook Dies funktioniert auch für Rails 3. Überprüfen Sie die Dokumente hier guide.rubyonrails.org/v3.2/migrations.html
Mahesh

Sie haben Recht! Es funktioniert sowohl für Schienen 2 als auch für Schienen 3. Vielen Dank an @Mahesh für Ihre Eingabe!
Morhook


65

Ich glaube, es gibt drei Möglichkeiten, um Migrationen zurückzusetzen (sie überschneiden sich auch):

  1. Führen Sie die letzte Migration herunter :

    rake db:migrate:down # Nur Schienen 2.

  2. Führen Sie eine Anzahl (n) der letzten Migrationen aus:

    rake db:rollback STEP=n

  3. Rolldown zu einer früheren, spezifischen Version:

    $ rake db:migrate:down VERSION=nnn # Rails 3 (auch Versionsnummer angeben).

Versionsnummer bedeutet SHA (Secure Hash Algorithm) für das Commit. Hierbei handelt es sich um eine lange Hexadezimalzahl, die ungefähr wie 886af3194768917c78e aussieht. Sie können dies sehen, indem Sie dies tun git log

Sie können diese Befehle (und andere) mit ihren Beschreibungen anzeigen, indem Sie Folgendes rake -T db:für Schienen 3.2 verwenden:

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
Herunterrollen auf eine bestimmte Version:rake db:migrate VERSION=<version number>
Ajedi32

3
Zumindest für Rails 3.0.20 ist der erste Befehl falsch. Ein einzelner rake db:migrate:downVorgang wird mit der Fehlermeldung "VERSION ist erforderlich" abgebrochen. Das empfohlene rake db:rollback funktioniert jedoch.
Martin

Wie in der Antwort beschrieben, Rails 2 NUR für den ersten Befehl.
Michael Durrant

1
Umgebungsvariablen unterscheiden zwischen Groß- und Kleinschreibung, also sollte es sein STEPundVERSION
Kostas Rousis

Zur Verdeutlichung $ rake db:migrate:down VERSION=nnnwird kein Rolldown auf eine Version durchgeführt, sondern die angegebene Version wird migriert .
Johnml

15

Sie können ein Rollback durchführen und angeben, wie viele letzte Migrationen zurückgesetzt werden sollen, z

rake db:rollback STEP=3

für 3 letzte Migrationen.


Dies ist eine schnellere und einfachere Methode, anstatt nach Versionsnummern zu suchen, wenn Sie die letzten Migrationen rückgängig machen möchten
Pre-Alpha

11

Als neuer Programmierer (oder für andere neue Programmierer)

rake db:rollbackfunktioniert etwa die halbe Zeit. Ich fange dort an.

Wenn nicht, rake db:migrate:down VERSION=3846656238

Fügen Sie VERSION für die Versionsnummer Ihrer Migrationsdatei ein, die Sie zurücksetzen möchten.


10
rake db:migrate:redo

Die letzte Migration wird rückgängig gemacht und erneut angewendet.


5

Für Schienen 5 können wir verwenden rails command instead of rake

rails db:migrate:down VERSION=<version>

Beispiel

Schienen db: migrate: down VERSION = 20170330090327


2

Führen Sie diesen Befehl in Ihrem Terminal aus:

rake db:migrate:status

oder

bundle exec rake db:migrate:status

Es zeigt den Status, die Migrations-IDs und den Migrationsnamen für alle zuvor durchgeführten Migrationen an. Wählen Sie Ihre Migrations-ID (dh Ihre Versionsnummer) aus und geben Sie diese ID nach version = ,, in den folgenden Befehl ein. Drücken Sie die Eingabetaste

bundle exec rake db:migrate:down VERSION=

0

Zurücksetzen einer Migration

(1) Identifizieren Sie zuerst die Migrations-ID

rake db:migrate:status

  • Kopieren Sie die ID-Nummer.

Identifizieren Sie die Migration, die zurückgesetzt werden soll.

(2) Führen Sie dann einen Rollback der Migration durch

rake db:migrate:down VERSION=20190802023239

  • Fügen Sie die entsprechende ID-Nummer oben ein. In Ihrem Fall ist die Migrations-ID natürlich anders! Verwenden Sie die richtige Migrations-ID.

....... und jetzt geht es los zu den Rennen!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.