Ich versuche, in meiner Rails-App nur eine Migration aus einem ganzen Haufen heraus auszuführen. Wie kann ich das machen? Ich möchte keine der Migrationen davor oder danach ausführen. Vielen Dank.
94
Ich versuche, in meiner Rails-App nur eine Migration aus einem ganzen Haufen heraus auszuführen. Wie kann ich das machen? Ich möchte keine der Migrationen davor oder danach ausführen. Vielen Dank.
STEP=n
Argument hinzudb:migrate
(won
ist die Anzahl der auszuführenden Migrationen, genau wie es für istdb:rollback
) - dann könnten Sierake db:migrate STEP=1
oderrake db:migrate STEP=2
usw.Antworten:
rake db:migrate:redo VERSION=xxxxxxx
, aber das wird dendown
und dann denup
Schritt ausführen . Sie können dies in Verbindung mit dem vorübergehenden Auskommentieren des Abwärtsschritts tun.quelle
rake -T
.db:test:prepare
auch nicht in dieser Liste angezeigt . Gott, ich bin zu spät zur Party.rake db:migrate:up VERSION=my_version
kann dies möglicherweise nichts bewirken, da die Tabelle schema_migrations weiterhin angibt, dass sie ausgeführt wurde. In der gleichen Situationrake db:migrate:redo VERSION=my_version
kann dies fehlschlagen, da die Tabelle nicht gelöscht werden kann. In diesem Fall kommentieren Sie diedown
Methode in der Migration vorübergehend aus und führen Sie sie erneut ausrake db:migrate:redo...
ähnlich
rake db:migrate:down
, um eine bestimmte Migration zu beenden. Sie können eine Liste der verfügbaren Rechenaufgaben mit erhaltenrake -T
.quelle
VERSION
hier erwähnte Wert ist der ganzzahlige Wert am Anfang jeder Ihrer Migrationsdateien (dies ist nur der Zeitstempel der Erstellung). Zum BeispielVERSION=20150720023630
.VERSION
es sich nur um eine Umgebungsvariable handelt, sodass sie im Befehl an erster Stelle stehen oder sogar vor dem Befehl festgelegt werden kann:VERSION=1234567890 rake db:migrate:up
Ich musste eine einzelne Migration ausführen, die sich geändert hat und unabhängig von allen anderen Migrationen erneut ausgeführt werden musste. Starten Sie die Konsole und gehen Sie folgendermaßen vor:
Nützlicher könnte dies in eine Rechenaufgabe usw. gesteckt werden.
quelle
change
, führen SieYourMigrations.migrate(:up)
stattdessen (oder:down
auch!) Ausrequire "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Migriert (fügt) ein bestimmtes Migrationsskript hinzu
rake db:migrate:down VERSION=version_no
Löscht ein bestimmtes Migrationsskript
quelle
Probieren Sie es aus.
quelle
VERSION
ist nur eine Umgebungsvariable, so dass sie im Befehl an erster Stelle stehen oder sogar vor dem Befehl festgelegt werden kann:VERSION=20098252345 rake db:migrate
Denken Sie daran, das Anführungszeichen um xxxx zu setzen. Xxxx ist der Zeitstempel (oder die Migrations-ID) für Ihre Migration.
Sie können die Zeitstempel (Migrations-ID) für die vorherigen Migrationen überprüfen, die Sie mithilfe von durchgeführt haben
quelle
Die Antwort von korch oben zu erweitern,
require
hat bei mir nicht funktioniert, aberload
funktioniert. Um konkret zu sein, für die Migrationsdatei:in der Konsole tippen
arbeitete für mich.
Dies war für Ruby 1.9.3p484 (2013-11-22 Revision 43786) [x86_64-Linux] und Rails 3.2.13.
quelle
Hinzufügen meiner 2 ¢ dazu, weil ich auf dasselbe Problem gestoßen bin:
Wenn Sie eine Migration unbedingt erneut ausführen möchten, ohne eine neue zu erstellen, können Sie Folgendes tun:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
Und Rails "vergisst", dass die Migration für 20150105181157 ausgeführt wurde. Wenn Sie nun db: migrate ausführen, wird sie erneut ausgeführt.
Dies ist jedoch fast immer eine schlechte Idee. Der einzige Fall, in dem dies sinnvoll sein könnte, ist, wenn Sie einen Entwicklungszweig haben und Ihre Migration noch nicht konkretisiert haben und in der Entwicklung einige Dinge hinzufügen möchten. Aber selbst dann ist es besser, die Migration in zwei Richtungen durchzuführen, damit Sie sie ordnungsgemäß zurücksetzen und wiederholt wiederholen können.
quelle
Es muss eine Möglichkeit geben, die Migrationsklasse über die Konsole auszuführen. Ich kann nicht scheinen, dass der Migrationscode erkennbar ist.
Wie aus den Kommentaren hervorgeht, wird es jedoch bevorzugt, die Migrationen der Reihe nach auszuführen. Verwenden:
Kopieren Sie Ihren Code und fügen Sie ihn in die Migration zu Skript / Konsole ein?
quelle
Ich habe eine Utility-Methode, die dies in der Entwicklung sehr einfach macht. Ich finde, dass es mir hilft, zu viele Migrationen zu vermeiden. Normalerweise ändere ich Migrationen, bis sie bereitgestellt wurden.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
quelle
Ich verwende diese Technik in der Entwicklung, wenn ich eine Migration erheblich ändere, und ich möchte nicht eine Tonne nach unten migrieren und dabei keine Daten verlieren (insbesondere, wenn ich Legacy-Daten importiere, die lange dauern Ich möchte nicht erneut importieren müssen.
Dies ist 100% hackisch und ich würde definitiv nicht empfehlen, dies in der Produktion zu tun, aber es wird den Trick tun:
quelle