it-swarm.com.de

Rake db: migrate - Wie mache ich alle Migrationen rückgängig und stelle sie wieder her

Gibt es einen schnellen Rake-Befehl db: rollback für alle Migrationen?

36

Während die Antwort von @Orlandos korrekt ist, führt rake db:reset nicht alle Migrationen erneut aus und lädt, wie er sagt, die Daten aus dem letzten Schema. Wenn Sie alle Migrationen rückgängig machen möchten, sollten Sie Folgendes tun:

rake db:migrate:reset #runs db:drop db:create db:migrate

Weitere Informationen finden Sie in diesem Beitrag: Unterschied zwischen Rake db: migrate db: reset und db: schema: load

127
Alex Falke

Wenn Sie wirklich alle Migrationen zurücksetzen möchten und nicht nur die Datenbank in einen ursprünglichen Zustand oder in das letzte Schema bringen, müssen Sie Folgendes ausführen:

rake db:migrate VERSION=0

Dadurch wird bei jeder Migration ein Rollback ausgeführt und sichergestellt, dass jede Migration reversibel ist.

Wenn Sie jetzt ausgeben

rake db:migrate:status

sie werden sehen, dass alle Migrationen immer noch vorhanden sind, sich aber in einem "Down" -Zustand befinden (nicht angewendet).

Andere Befehle, die einen rake db:reset oder rake db:drop implizieren (z. B. in den Antworten von @Orlando oder @Alex Falke), führen zu keinem Rollback, dh sie stellen nicht sicher, dass jede Migration reversibel ist.

Außerdem kann rake db:drop nicht ausgeführt werden, während andere Benutzer auf die Datenbank zugreifen, während Rollbacks live ausgeführt werden können (auch wenn dies generell nicht empfohlen wird). Wenn Sie die Datenbank löschen und erneut erstellen, wird auch die Tabelle für die Schema-Migration gelöscht. Wenn jemand rake db:migrate:status ausführt, nachdem die Datenbank gelöscht wurde, wird er mit "Schema-Migrationstabelle ist noch nicht vorhanden" beantwortet und hat keine Hinweise darüber, welche Migrationen angewendet werden können (sofern er es noch nicht kennt oder auflisten kann).

23

verwenden Sie einfach rake db:reset. Dadurch wird Ihre Datenbank gelöscht (dies gilt auch für das Rückgängigmachen aller Migrationen) und das Zurücksetzen auf das letzte Schema.

UPDATE: ein korrekterer Ansatz wird rake db:migrate:reset verwenden. Dadurch wird die Datenbank gelöscht, erneut erstellt und alle Migrationen ausgeführt, anstatt auf das neueste Schema zurückgesetzt zu werden.

14
Orlando

Wenn ein Berechtigungsproblem auftritt (wie mir das passiert ist), könnten Sie vielleicht versuchen, alle Datenbanktabellen zu löschen, wie ich es mit Rubymin getan habe (einfach das Datenbankwerkzeugfenster öffnen, alle Tabellen auswählen und mit der rechten Maustaste klicken -> Ablegen) andere IDEs. Einige Tabellen wie sqlite_master und sqlite_sequence wurden in der Ablage einfach ignoriert.

Dies erlaubte mir zu tun 

Rails db:migrate

und alles hat gut funktioniert. Natürlich verlieren Sie alle Daten!

0
Loaderon