2012-02-10 10 views
5

Aktualizuję aplikację Rails 1.2.3 do wersji 3.2.1.Jak zaktualizować migracje podczas aktualizacji z aplikacji Rails 1.2.3?

Próbuję dowiedzieć się, w jaki sposób mogę zaktualizować strukturę migracji, aby była zgodna z najnowszą wersją Railsów, tak, aby idealnie można było uruchomić rake db:migrate podczas konfigurowania aplikacji. Obecnie rozwiązałem ten problem, robiąc tylko rake db:migrate:up VERSION=[version_number] niezależnie od migracji, którą muszę przeprowadzić. Jeśli po prostu uruchomię rake db:migrate, spróbuje ponownie uruchomić wszystkie migracje od początku i zatrzymuje się (ponieważ te migracje zostały już uruchomione w dump db mam).

Migracje w aplikacji wyglądają tak: 001_add_some_model.rb, 002_add_some_other_model.rb zamiast 20120209182512_add_some_model.rb.

Czy ktoś ma z tym jakieś doświadczenie? Jak mogę to naprawić?

+6

Wow od 1.2.3 do 3.2.1. Powodzenia ... – lucapette

+0

@lucapette Dzięki! To prawie zrobione, po prostu chcę, aby migracje podczas pracy były bardziej naturalne. – jfedick

+0

Rozwiązaniem, które widziałem dość często, jest "upuszczanie migracji i tworzenie nowej jako punktu wyjścia" – lucapette

Odpowiedz

7

myślę, że należy restart swoje migracje, upuścić wszystkie migrację masz i stworzyć nową migrację z definicjami aktualnych modeli. Pierwszym przykładem jest this migration.

2

Nie zaleca się uruchamiania wszystkich migracji w celu skonfigurowania nowej bazy danych nawet w aktualnej aplikacji Rails 3. Jest to wyjaśnione w db/schema.rb:

Należy zauważyć, że definicja ta schema.rb jest wiarygodnym źródłem wiedzy o schemacie bazy danych. Jeśli chcesz utworzyć bazę danych aplikacji dla innego systemu , powinieneś używać db: schema: load, nie uruchamiając wszystkich migracji od zera. To ostatnie jest wadliwe i niezrównoważone (im więcej migracji, tym wolniej będzie działać i tym większe prawdopodobieństwo problemów).

0

Zamiast tego, co zasugerowałem, utworzyłbym nowe migracje od zera. Uruchom wszystkie modele w bieżącym stanie i utwórz nowe migracje dla każdego z nich, w ten sposób możesz nadal korzystać z mocy migracji później, np. Dodając kolumnę do tabeli lub zmieniając typ kolumny.

Jeśli utworzysz pojedynczą migrację dla wszystkich modeli, like has been suggested, utracisz ślad modelu w nazwie migracji.

To kolejny sposób na zrobienie tego i odzwierciedla moją własną wizję.

Powiązane problemy