Ich habe die folgende Migrationsdatei db\migrate\20100905201547_create_blocks.rb
Wie kann ich diese Migrationsdatei spezifisch zurücksetzen?
Ich habe die folgende Migrationsdatei db\migrate\20100905201547_create_blocks.rb
Wie kann ich diese Migrationsdatei spezifisch zurücksetzen?
Antworten:
rake db:rollback STEP=1
Dies ist eine Möglichkeit, wenn die Migration, die Sie zurücksetzen möchten, die zuletzt angewendete ist. Sie können 1 für beliebig viele Migrationen ersetzen, die Sie zurückgehen möchten.
Zum Beispiel:
rake db:rollback STEP=5
Rollt auch die gesamte Migration zurück, die später stattgefunden hat (4, 3, 2 und auch 1).
Verwenden Sie Folgendes, um alle Migrationen auf eine Zielmigration zurückzusetzen (und diese einzuschließen): (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 (außer Betrieb) zurückzusetzen, verwenden Sie:
rake db:migrate:down VERSION=20100905201547
Beachten Sie, dass dadurch KEINE intervenierenden Migrationen zurückgesetzt werden - nur die aufgelistete. Wenn Sie dies nicht beabsichtigt haben, können Sie es sicher ausführen, rake db:migrate
und es wird nur dieses erneut ausgeführt, wobei alle anderen übersprungen werden, die zuvor nicht zurückgesetzt wurden.
Und wenn Sie jemals eine einzelne Migration außerhalb der Reihenfolge migrieren möchten, gibt es auch die Umkehrung db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. Ich habe das einmal gemacht und es wurde verrückt und rollte alles zurück. Nicht nett! Dies war Rails 4.2 - ich denke, es kann jetzt behoben werden.
rake db:migrate:down VERSION=20100905201547
rollt die spezifische Datei zurück.
Um die Version aller Migrationen zu finden, können Sie diesen Befehl verwenden:
rake db:migrate:status
Oder das Präfix des Dateinamens der Migration ist einfach die Version, die Sie zurücksetzen müssen.
Weitere Informationen zu Migrationen finden Sie im Ruby on Rails-Handbuch .
So rollen 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 Version beispielsweise 20141201122027 lautet, tun Sie Folgendes:
rake db:migrate:down VERSION=20141201122027
um diese spezifische Migration zurückzusetzen.
Sie können Ihre Migration rake db:rollback
mit verschiedenen Optionen zurücksetzen. Die Syntax hängt von Ihren Anforderungen ab.
Wenn Sie nur die letzte Migration zurücksetzen möchten, können Sie beide 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
Wo n
ist die Anzahl der Migrationen zum Rollback, gerechnet von 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.
rake db:migrate:down VERSION=your_migrations's_version_number_here
Die Version ist das numerische Präfix im Dateinamen der Migration
So finden Sie die Version :
Ihre Migrationsdateien werden in Ihrem rails_root/db/migrate
Verzeichnis gespeichert . Suchen Sie die entsprechende Datei, bis zu der Sie ein Rollback durchführen möchten, und kopieren Sie die Präfixnummer.
zum Beispiel
Dateiname: 20140208031131_create_roles.rb
dann ist die Version20140208031131
rake db:migrate:status
Zurücksetzen der letzten Migration:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Zurücksetzen 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
Zurücksetzen 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
So rollen 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 aufgerufen wurde db/migrate/20141201122027_create_some_table.rb
, die Sie zurücksetzen möchten, lautet die VERSION für diese Migration. Dies 20141201122027
ist der Zeitstempel, zu dem diese Migration erstellt wurde, und der Befehl zum Zurücksetzen dieser Migration lautet :
rake db:migrate:down VERSION=20141201122027
Wenn es sich um eine reversible Migration handelt und die letzte, die ausgeführt wurde, führen Sie sie aus rake db:rollback
. Und Sie können immer die Version verwenden. z.B
Die Migrationsdatei lautet 20140716084539_create_customer_stats.rb. Der Rollback-Befehl lautet also:
rake db:migrate:down VERSION=20140716084539
Verwenden Sie Folgendes, um alle Migrationen auf eine bestimmte Version (z. B. 20181002222222
) zurückzusetzen:
rake db:migrate VERSION=20181002222222
(Beachten Sie, dass dies verwendet db:migrate
- nicht db:migrate:down
wie in anderen Antworten auf diese Frage.)
Angenommen, die angegebene Migrationsversion ist älter als die aktuelle Version, werden alle Migrationen bis zur angegebenen Version zurückgesetzt, jedoch nicht eingeschlossen.
Zum Beispiel, wenn rake db:migrate:status
anfänglich 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
Referenz: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Aus dem Rails Guide
Sie können die Fähigkeit von Active Record verwenden, Migrationen mithilfe der folgenden revert
Methode zurückzusetzen:
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 revert
Methode akzeptiert auch einen Befehlsblock zum Umkehren. Dies kann nützlich sein, um ausgewählte Teile früherer Migrationen zurückzusetzen. Stellen Sie sich zum Beispiel vor, dass CreateBlock festgeschrieben ist und später entschieden wird, dass es am besten ist, Active Record-Validierungen 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 revert 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 alles wird durch Zurücksetzen erledigt.
Migrationen ändern den Status der Datenbank mit dem Befehl
$ bundle exec rake db:migrate
Wir können einen einzelnen Migrationsschritt mit rückgängig machen
$ bundle exec rake db:rollback
Um den ganzen Weg zurück zum Anfang zu gehen, können wir verwenden
$ bundle exec rake db:migrate VERSION=0
Wie Sie vielleicht erraten haben, wird das Ersetzen von 0 durch eine andere Nummer zu dieser Versionsnummer migriert, wobei die Versionsnummern aus der sequentiellen Auflistung der Migrationen stammen
Nun, in Rails 5 ist es ganz einfach. Rake db: migrate: status oder Rails db: migrate: status
Es wurde so geändert, dass beide gleich behandelt werden. Wählen Sie dann einfach die Version aus, die Sie zurücksetzen 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 stecken bleiben, gehen Sie einfach zur Migrationsdatei und kommentieren Sie die bereits migrierten Zeilen aus.
Ich hoffe, das hilft
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file