2013-06-07 9 views
5

Właśnie zainstalowałem program, więc tabela nie zawierała żadnych danych oprócz jednego użytkownika (mnie).Jak ponownie uruchomić migrację, bez usuwania wszystkich nowszych migracji?

Ponownie robiłem bazę danych od nowa, więc rzuciłem to wszystko. Zrobiłem rails g scaffold wygenerować 6 nowych modeli i kontrolery i zrobił rake db:migrate

W moim katalogu /db/migrate Mam plik opracować z pliku 20130603211907_devise_create_users.rb

Oto problem: Jeśli zrobię rake db:migrate:down VERSION=20130603211907 usunie wszystkie nowe migracje .

Jak ponownie uruchomić migrację, bez usuwania wszystkich nowszych migracji?

+0

Mam zamiar wypróbować 'rake db: migrate' po zmianie znacznika czasu na migrate i zobacz, co się stanie. – Kush

Odpowiedz

20

rake db:migrate:redo VERSION=xxxxxxx

To będzie uruchomić w dół i w górę krok. Możesz to zrobić w połączeniu z chwilowym komentowaniem kroku w dół.

+4

Aby uzyskać listę wersji wykonaj: 'rake db: migrate: status'. – Adobe

5

Dzięki za pomoc dla wszystkich. To właśnie zadziałało:

OSTRZEŻENIE: te polecenia usuwają wszystkie dane z bazy danych!

rake db:drop 
rake db:create 
rake db:migrate 
+3

rozważ zaakceptowanie odpowiedzi, która zadziałała dla ciebie zamiast dołączania rozwiązania po raz drugi we własnej odpowiedzi;) –

+1

haha ​​zrobi :) – Kush

0

Można zadzwonić rake db:migrate:redo VERSION=20130603211907 który będzie ponownie uruchomić określonej wersji.

Ponadto, jeśli masz migracje, które powinny działać tylko gdy idzie w górę łańcucha migracji (np transformacja danych, kopiowanie, itd.), Można określić

def up 
    do_something 
end 

i def dół (zejście) , odpowiednio, metoda def change (both ways).

Aby tymczasowo wyłączyć migracje, wystarczy na przykład zmienić nazwę metody def up na def up_ i zostanie ona zignorowana podczas przetwarzania łańcucha migracji.

Powiązane problemy