Gibt es einen schnellen Rake-Befehl db: rollback für alle Migrationen?
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
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).
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.
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!