2012-05-04 9 views
15

Napisałem kilka migracji dla mojej aplikacji Rails 3, ale chciałbym zmienić kolejność migracji. Jak mogę zmienić kolejność lub sekwencję migracji? Czy jest to tak proste, jak zmiana nazwy pliku migracji na coś, co wygląda na znacznik czasu?Kolejność zmian kolejności lub kolejkowania Railsów

Wiem, że to dziwne pytanie, ale w zasadzie zrobiłem bałagan z moich migracji i usunąłem stare migracje, a teraz muszę upuścić tabelę przed utworzeniem nowej. Wiem też, że mogę dołączyć instrukcję upuszczania do migracji przy tworzeniu nowego stołu, ale jestem ciekawa, jak zmienić kolejność migracji.

Odpowiedz

15

Tak, uruchamia migracje, które nie zostały uruchomione w kolejności prefiksu. We wcześniejszych wersjach szyn, może 2.1 lub 2.2, były one numerowane począwszy od 01, ale zostały przełączone na znaczniki czasu.

Istnieje tabela, która śledzi, które migracje zostały uruchomione. Intencją jest, że wielu programistów dodało mi migracje i później sprawdziło je w kontroli wersji. Może być migracja, która nie została uruchomiona, ale jest ponumerowana przed migracją o najwyższym numerze, która została uruchomiona.

Jeśli zmienisz sekwencję migracji, (i ja mam), lepiej jest przejść do pierwszej wersji przed każdą ponowną sekwencją migracji. Użyj opcji VERSION z db:migrate. Jeśli migracja o najwyższym numerze, którą chcesz zatrzymać (nie uruchamiać w dół), to 20120318143249, nazwij to w ten sposób.

rake db:migrate VERSION=20120318143249 

Często uruchamiam migrację i ponownie ją uruchamiam, dopóki nie uzyskam szczegółowych informacji na temat migracji. Czasami zamawiam je, kiedy chcę pracować nad jednym z nich i chcę, żeby był ostatni.

4

Tak, przedrostek nazwy pliku określa kolejność wykonywania. Należy jednak pamiętać, że zmieni to tylko bieżący system, jeśli wyczyścisz bazę danych lub zaczniesz od nowa.

+0

Nie zawsze prawda. Zakładając, że późniejsze migracje są odwracalne, możesz: 'rake db: migrować VERSION = ' jak sugeruje @ Marlin-Pierce – varleti

Powiązane problemy