2016-07-30 26 views
5

Zauważyłem, że wiele z naszych kolumn, które nie mają limit: xxx w migracjach, nagle dostaje limity zastosowane do kolumn, a nie w sama baza danych, ale w naszym pliku db/schema.rb. Nie jest to straszne, gdy przeprowadzamy migrację w dowolnym środowisku. Miejsce, w którym staje się kłopotliwe, to kiedy tworzymy nowe bazy danych - nie pasują one już do tego, co mamy w różnych środowiskach prod/staging/qa.aktualizacja do szyn 4.2.6: rake db: migracja wstawiania limitów kolumn do schematu.rb

Potrzebuję znaleźć sposób, aby to się nie stało.

W każdej chwili możemy dodać migrację, którą musimy wykonać, aby wykonać wyjątkowo skomplikowaną i żmudną git add -p db/schema.rb, a wraz z upływem czasu tracę pewność, że nasz plik db/schema.rb pasuje do dowolnej wersji rzeczywistości .

Jako punkt danych, jeśli uruchomię rake db:migrate bez nowych migracji, db/schema.rb zostanie przebudowany i ma niesamowicie duże różnice.

Odpowiedz

5

Według tej noty w Rails 4.2 Release Notes:

PostgreSQL i SQLite adaptery nie dodać domyślny limit 255 znaków na kolumnach smyczkowych.

I ten komentarz do odpowiedniego Rails Pull Request 14579:

db/schema.rb służy do dokładnie odtworzyć bazę danych. Wszystkie kolumny ciągów zostały dodane przed 4.2 z domyślnym limitem 255. W tym czasie nie było konieczne zrzucanie limitu do db/schema.rb, ponieważ było to domyślne. Teraz zmieniliśmy domyślny na no limit. Musimy zrzucić te limity, aby odtworzyć bazę danych.

problem nie jest nowym domyślnym, ale odbiciem starego.

Aby rozwiązać problem, sugeruję uruchomienie migracji, która spowodowałaby spadek limitów z odpowiednich pól, a następnie odtworzenie schema.rb z bazy danych. Powinno to doprowadzić do nowego, spójnego stanu.

+0

ok, dzięki za odpowiedź. Sprawdzę moje twierdzenie, że w bieżącej bazie danych limit na polu wynosi 8, a następnie w nowo wygenerowanym schemacie.rb jest teraz 4. Założę się, że po prostu coś przeoczyłem. – jaydel