2013-04-24 5 views

Odpowiedz

111

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

+8

To prawdziwa odpowiedź prawidłowa –

+3

Ta odpowiedź powinna być wybrana, aby uniknąć nieporozumień. –

+0

'rake db: migrate: reset' tak naprawdę nie przywraca żadnej migracji, tak właśnie zadaje pytanie. –

14

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.

+8

Nie jest to pytanie, które chce zadać. Jeśli zmienisz coś w migracji, nie zaktualizuje ona zmian w schemacie. –

+0

@Alex Falke ma poprawną odpowiedź na to pytanie. – Qasim

+0

Przyspieszona odpowiedź @Qasim :) – Orlando

16

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ć).