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?

shibly
quelle

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

Mahesh
quelle
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
114

Führen Sie einfach diesen Befehl aus:

rake db:rollback
damienbrz
quelle
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)
Michael Durrant
quelle
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.

Bender
quelle
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.

LukeBickleTWA
quelle
10
rake db:migrate:redo

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

Keneth
quelle
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

Mihir Kumar Thakur
quelle
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=
Arun JP
quelle
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!

BKSpurgeon
quelle