it-swarm.com.de

Wie kann eine bestimmte Migration rückgängig gemacht werden?

Ich habe die folgende Migrationsdatei db\migrate\20100905201547_create_blocks.rb

Wie kann ich diese Migrationsdatei gezielt zurücksetzen?

742
AnApprentice
rake db:rollback STEP=1

Ist eine Möglichkeit, dies zu tun, wenn die Migration, für die Sie ein Rollback durchführen möchten, die letzte ist, die angewendet wurde. Sie können 1 für beliebig viele Migrationen ersetzen, die Sie zurückgehen möchten.

Zum Beispiel:

rake db:rollback STEP=5

Setzt auch die gesamte spätere Migration zurück (4, 3, 2 und auch 1).

Verwenden Sie zum Zurücksetzen aller Migrationen auf (und einschließlich) einer Zielmigration Folgendes: (Dieser korrigierte Befehl wurde NACH allen Kommentaren hinzugefügt, die auf den Fehler im ursprünglichen Beitrag hinweisen.)

rake db:migrate VERSION=20100905201547

Um NUR EINE bestimmte Migration rückgängig zu machen (NICHT BESTELLBAR), verwenden Sie:

rake db:migrate:down VERSION=20100905201547

Beachten Sie, dass dadurch KEINE zwischenzeitlichen Migrationen rückgängig gemacht werden - nur die aufgelistete. Wenn dies nicht Ihre Absicht ist, können Sie rake db:migrate sicher ausführen, und es wird nur dieses eine erneut ausgeführt, wobei alle anderen, die zuvor nicht zurückgesetzt wurden, übersprungen werden.

1192
Zachary Wright
rake db:migrate:down VERSION=20100905201547

rollback der spezifischen Datei.


Mit dem folgenden Befehl können Sie die Version aller Migrationen ermitteln:

rake db:migrate:status

Oder einfach das Präfix des Dateinamens der Migration ist die Version, die Sie für das Rollback benötigen.


Siehe der Ruby auf Rails Leitfadeneintrag zu Migrationen.

840
John Creamer

So setzen Sie die letzte Migration zurück:

rake db:rollback

Wenn Sie eine bestimmte Migration mit einer Version rückgängig machen möchten, sollten Sie Folgendes tun:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

Für z.B. Wenn die Version 20141201122027 ist, werden Sie Folgendes tun:

rake db:migrate:down VERSION=20141201122027

rollback dieser spezifischen Migration.

51
Waleed

Sie können Ihre Migration zurücksetzen, indem Sie rake db:rollback mit verschiedenen Optionen verwenden. Die Syntax richtet sich nach Ihren Anforderungen.

Wenn Sie nur die letzte Migration zurücksetzen möchten, können Sie eine der beiden Optionen verwenden

rake db:rollback

oder

rake db:rollback STEP=1

Wenn Sie die Anzahl der Migrationen gleichzeitig zurücksetzen möchten, übergeben Sie einfach ein Argument:

rake db:rollback STEP=n

dabei ist n die Anzahl der Migrationen, für die ein Rollback durchgeführt werden soll, gerechnet ab der letzten Migration.

Wenn Sie ein Rollback auf eine bestimmte Migration durchführen möchten, sollten Sie die Version der Migration wie folgt übergeben:

rake db:migrate:down VERSION=xxxxx

dabei ist xxxxx die Versionsnummer der Migration.

26
uma

rake db:migrate:down VERSION=your_migrations's_version_number_here

Die Version ist das numerische Präfix des Dateinamens der Migration

So finden Sie die Version:

Ihre Migrationsdateien werden in Ihrem Verzeichnis Rails_root/db/migrate gespeichert. Suchen Sie die entsprechende Datei, für die Sie ein Rollback durchführen möchten, und kopieren Sie die Präfixnummer.

zum Beispiel

dateiname: 20140208031131_create_roles.rb dann ist die Version 20140208031131

24
Hardik

Letzte Migration zurücksetzen:

# Rails < 5.0
rake db:rollback

# Rails >= 5.0
rake db:rollback
# or
Rails db:rollback

Rollback der letzten n Anzahl von Migrationen

# Rails < 5.0
rake db:rollback STEP=2

# Rails >= 5.0
rake db:rollback STEP=2
# or
Rails db:rollback STEP=2

Rollback einer bestimmten Migration

# 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
14
Deepak Mahakale

So setzen Sie die letzte Migration zurück:

rake db:rollback

Wenn Sie eine bestimmte Migration mit einer Version rückgängig machen möchten, sollten Sie Folgendes tun:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

Wenn die Migrationsdatei, für die Sie ein Rollback durchführen möchten, db/migrate/20141201122027_create_some_table.rb heißt, lautet die VERSION für diese Migration 20141201122027. Dies ist der Zeitstempel der Erstellung dieser Migration und der Befehl zum Rollback dieser Migration :

rake db:migrate:down VERSION=20141201122027
13
Sandip Vavhal

Wenn es sich um eine reversible und die letzte Migration handelt, die ausgeführt wurde, führen Sie rake db:rollback aus. Und Sie können immer Version verwenden. z.B

die Migrationsdatei lautet 20140716084539_create_customer_stats.rb, daher lautet der Rollback-Befehl rake db:migrate:down VERSION=20140716084539

6
Santanu

Von Rails Guide

Zurücksetzen früherer Migrationen

Mit der Active Record-Funktion können Sie Migrationen mit der revert -Methode zurücksetzen:

require_relative '20100905201547_create_blocks'

class FixupCreateBlock < ActiveRecord::Migration
  def change
    revert CreateBlock

    create_table(:apples) do |t|
      t.string :variety
    end
  end
end

Die Methode revert akzeptiert auch einen Anweisungsblock zum Umkehren. Dies kann hilfreich sein, um ausgewählte Teile früherer Migrationen zurückzusetzen. Angenommen, CreateBlock wird festgeschrieben, und es wird später entschieden, dass es am besten ist, Active Record-Überprüfungen anstelle der CHECK-Einschränkung zu verwenden, um die Postleitzahl zu überprüfen.

    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

Dieselbe Migration hätte auch ohne Verwendung von "Zurücksetzen" geschrieben werden können, dies hätte jedoch einige weitere Schritte erforderlich gemacht: Umkehren der Reihenfolge von "create_table" und "reversible", Ersetzen von "create_table" durch "drop_table" und schließlich Ersetzen von "up" durch "down" und umgekehrt. Dies wird alles durch Rückgängigmachen erledigt.

4

Migrationen ändern den Status der Datenbank mithilfe des Befehls

$ bundle exec rake db:migrate

Wir können einen einzelnen Migrationsschritt mit rückgängig machen

  $ bundle exec rake db:rollback

Um zum Anfang zurückzukehren, können wir verwenden

  $ bundle exec rake db:migrate VERSION=0

Wie Sie vielleicht erraten haben, wird durch Ersetzen von 0 durch eine andere Nummer diese Versionsnummer ersetzt, wobei die Versionsnummern aus der sequentiellen Auflistung der Migrationen stammen

3
Nirupa

Nun, in Rails 5 ist es ganz einfach, db: migrate: status oder Rails db: migrate: status zu rake

Es wurde so modifiziert, dass beide gleich behandelt werden. Wählen Sie dann einfach die Version aus, für die Sie ein Rollback durchführen möchten, und führen Sie dann rake db aus: migrate VERSION = 2013424230423

Stellen Sie sicher, dass VERSION nur aus Großbuchstaben besteht

Wenn Sie ein Problem mit einem Schritt der Migration haben oder in der Mitte hängen bleiben, gehen Sie einfach zur Migrationsdatei und kommentieren Sie die Zeilen aus, die bereits migriert wurden.

Ich hoffe, das hilft

2
Shahin

Verwenden Sie zum Zurücksetzen aller Migrationen auf eine bestimmte Version (z. B. 20181002222222):

rake db:migrate VERSION=20181002222222

(Beachten Sie, dass dies db:migrate - nicht db:migrate:down wie in anderen Antworten auf diese Frage verwendet.)

Vorausgesetzt, die angegebene Migrationsversion ist älter als die aktuelle Version, werden alle Migrationen bis zur angegebenen Version rückgängig gemacht, jedoch nicht eingeschlossen.

Wenn beispielsweise rake db:migrate:status zum ersten Mal angezeigt wird:

  (... 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

Laufen:

rake db:migrate VERSION=20181002222222

Wird darin enden, dass:

  (... 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

Hinweis: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations

2
Jon Schneider

Wenn Sie ein Rollback und eine Migration durchführen möchten, können Sie Folgendes ausführen:

rake db:migrate:redo

Das ist das gleiche wie:

rake db:rollback
rake db:migrate
1
Iwan B.