Czy istnieje szybka prowizja db: rollback dla wszystkich migracji?Prowizja db: migracja - w jaki sposób cofnąć wszystkie migracje i ponowić je?
Odpowiedz
Podczas odpowiedzi @Orlandos jest poprawna, rake db:reset
nie ponawia wszystkich migracji i, jak sam mówi, ładuje dane z ostatniego schematu. Jeśli chcesz cofnąć wszelkie migracje, a następnie przerobić je, należy użyć:
rake db:migrate:reset #runs db:drop db:create db:migrate
można zobaczyć więcej informacji w tym poście: Difference between rake db:migrate db:reset and db:schema:load
wystarczy użyć rake db:reset
, który spowoduje usunięcie bazy danych (tak samo jak cofnięcie wszystkich migracji) i zresetowanie do ostatniego schematu.
UPDATE: bardziej poprawnym podejściem będzie użycie rake db:migrate:reset
. Spowoduje to usunięcie bazy danych, utworzenie jej ponownie i uruchomienie wszystkich migracji zamiast resetowania do najnowszego schematu.
Jeśli naprawdę chcesz wycofywania wszystkich migracji, a nie tylko brać bazy danych do stanu dziewiczego lub do ostatniego schematu, trzeba uruchomić:
rake db:migrate VERSION=0
To rzeczywiście wycofać całą drogę w dół każdy migracja i Ensu że każda migracja jest odwracalna.
Jeśli teraz wydać
rake db:migrate:status
widać, że wszystkie migracje wciąż tam są, ale są one w „dół” (nie stosowane) państwa.
Inne polecenia, które implikują rake db:reset
lub rake db:drop
(takie jak w odpowiedziach przez @Orlando lub @Alex Falke) nie zrobi żadnego wycofywania w ogóle: to znaczy, że nie zapewni, że każda migracja jest odwracalny.
Ponadto, rake db:drop
nie można uruchomić, gdy baza danych jest dostępna dla innych użytkowników, natomiast wycofywanie można wykonywać na żywo (nawet jeśli zazwyczaj nie jest to zalecane). I na koniec, po prostu upuszczenie i ponowne utworzenie bazy danych spowoduje również usunięcie tabeli migracji schematu: jeśli ktoś uruchomi rake db:migrate:status
po zrzuceniu bazy danych, otrzyma odpowiedź z "Tabelą migracji schematów jeszcze nie istnieje" i nie będzie żadnych wskazówek o tym, które migracje można zastosować (chyba, że jeszcze o tym wie lub może je wymienić).
To prawdziwa odpowiedź prawidłowa –
Ta odpowiedź powinna być wybrana, aby uniknąć nieporozumień. –
'rake db: migrate: reset' tak naprawdę nie przywraca żadnej migracji, tak właśnie zadaje pytanie. –