Gibt es eine einfache Möglichkeit, eine einzelne Migration auszuführen? Ich möchte nicht auf eine bestimmte Version migrieren, sondern nur eine bestimmte ausführen.
267
Gibt es eine einfache Möglichkeit, eine einzelne Migration auszuführen? Ich möchte nicht auf eine bestimmte Version migrieren, sondern nur eine bestimmte ausführen.
Antworten:
Sie können den Code einfach direkt aus der Ruby-Datei ausführen:
Hinweis: Neuere Versionen von Schienen erfordern möglicherweise
AddFoos.new.up
eher alsAddFoos.up
.Ein alternativer Weg (ohne IRB), der sich auf die Tatsache stützt, dass ein Array von Klassennamen zurückgegeben werden muss:
Beachten Sie, dass in diesem
schema_migrations
Fall die Tabelle wahrscheinlich nicht aktualisiert wird, aber anscheinend möchten Sie dies trotzdem.quelle
AddFoos.new.up
require "./db/migrate/db/migrate/20090408054532_add_foos.rb"
dannAddFoos.new.up
change
anstelle vonup
und verwendetdown
, müssen Sie ausführenAddFoos.new.migrate(:up)
AddFoos.new.change
Unter der Annahme einer relativ neuen Version von Rails können Sie immer Folgendes ausführen:
Wobei version der Zeitstempel im Dateinamen der Migration ist.
Bearbeiten: Irgendwann in den letzten 8 Jahren (ich bin nicht sicher, welche Version) hat Rails Überprüfungen hinzugefügt, die verhindern, dass dies ausgeführt wird, wenn es bereits ausgeführt wurde. Dies wird durch einen Eintrag in der
schema_migrations
Tabelle angezeigt . Um es erneut auszuführen, führen Sie esrake db:migrate:redo VERSION=20090408054532
stattdessen einfach aus .quelle
rake db:migrate:down VERSION=XXX
Wenn Sie eine bestimmte Migration ausführen möchten , tun Sie dies
Wenn Sie Migrationen mehrmals ausführen möchten , tun Sie dies
Wenn Sie ein ausführen möchten einzelne Migration mehrere Male, tun
(Die Versionsnummer finden Sie im Dateinamen Ihrer Migration.)
Bearbeiten: Sie können Ihre Migrationsdatei auch einfach umbenennen, z.
20151013131830_my_migration.rb
->20151013131831_my_migration.rb
Wenn Sie dann normal migrieren, wird die Migration als neu behandelt (nützlich, wenn Sie in einer Remote-Umgebung (z. B. Staging) migrieren möchten, auf die Sie weniger Kontrolle haben.
Bearbeiten 2 : Sie können auch einfach den Migrationseintrag in der Datenbank nuklearisieren. Z.B:
rake db:migrate
wird dann dieup
Methode der Nuked-Migrationen erneut ausführen.quelle
Wenn Sie eine
change
Methode wie diese implementiert haben:Sie können eine Instanz der Migration und führen Sie erstellen
migrate(:up)
odermigrate(:down)
auf eine Instanz, wie folgt aus :quelle
up
und verwendendown
.Dies sind die Schritte, um diese Migrationsdatei "20150927161307_create_users.rb" erneut auszuführen.
Kopieren Sie die Klasse in dieser Datei und fügen Sie sie in die Konsole ein.
Erstellen Sie eine Instanz der Klasse
CreateUsers
:c1 = CreateUsers.new
change
dieser Instanz aus:c1.change
quelle
require "./db/migrate/20150927161307_create_users.rb"
anstelle von Kopieren und Einfügen. Sie können die Klasse dann auf die gleiche Weise ausführen, indem Sie die in der Klasse definierte Methode instanziieren und aufrufenCreateUsers.new.change
.Ab
rails 5
können Sie auchrails
anstelle von verwendenrake
Schienen 3 - 4
Schienen 5
quelle
rails db:migrate VERSION=20160920130051
Wenn Sie Probleme mit Pfaden haben, können Sie diese verwenden
quelle
Methode 1 :
Methode 2:
In der Rails-Konsole 1. Kopieren Sie die Migrationsklasse in die Konsole (z. B. add_name_to_user.rb). 2. Geben Sie dann in der Konsole Folgendes ein
Es ist vollbracht!!
quelle
Bitte beachten Sie, dass
script/runner
Sie möglicherweise stattdessenrails runner
in neuen Schienenumgebungen verwenden müssen.quelle
Wenn Sie es von der Konsole aus ausführen möchten, suchen Sie Folgendes:
Ich habe die anderen Antworten ausprobiert, aber das
Rails.root
Fordern ohne hat für mich nicht funktioniert.Außerdem
.migrate(:up)
erzwingt part die erneute Ausführung der Migration, unabhängig davon, ob sie bereits ausgeführt wurde oder nicht. Dies ist nützlich, wenn Sie bereits eine Migration ausgeführt haben, diese durch Herumspielen mit der Datenbank rückgängig gemacht haben und eine schnelle Lösung wünschen, um sie wieder zu starten.quelle
Zumindest in der neuesten Rails-Version (5.2 zum Zeitpunkt des Schreibens) gibt es eine weitere Möglichkeit, die ausgeführten Migrationen zu filtern. Man kann einen Filter in a passieren
SCOPE
Umgebungsvariablen übergeben, der dann zur Auswahl von Migrationsdateien verwendet wird.Angenommen, Sie haben zwei Migrationsdateien
1_add_foos.rb
und werden2_add_foos.run_this_one.rb
ausgeführtwird nur auswählen und ausführen
2_add_foos.run_this_one.rb
. Beachten Sie, dass alle Migrationsdateien ausgeführt werden, die dem Bereich entsprechen.quelle