2016-07-30 6 views
5

Ich finde, dass viele unserer Spalten, die keine in den Migrationen haben, plötzlich Grenzen für die Spalten, nicht in die Datenbank selbst, aber in unserer Datei db/schema.rb. Das ist nicht schlimm, wenn wir in einer Umgebung nur eine Migration durchführen. Der Ort, an dem es problematisch wird, ist, wenn wir neue Datenbanken einrichten - sie entsprechen nicht mehr dem, was wir in unseren verschiedenen Umgebungen prod/staging/qa haben.aktualisiert auf Rails 4.2.6: Rake db: migrieren Einfügen von Spaltenlimits in schema.rb

Ich muss einen Weg finden, dies nicht passieren zu lassen.

Da die Dinge jederzeit stehen wir eine Migration hinzufügen wir am Ende eine sehr komplexe und langwierige git add -p db/schema.rb tun müssen und mit der Zeit verliert ich das Vertrauen, dass unsere db/schema.rb Datei mit jeder Version der Realität übereinstimmt .

Als Datenpunkt, wenn ich rake db:migrate ohne neue Migrationen ausführen, wird db/schema.rb wieder aufgebaut und hat eine wahnsinnig große diff.

Antwort

5

Nach dieser Bemerkung in Rails 4.2 Release Notes:

Die PostgreSQL und SQLite-Adapter hinzufügen nicht mehr eine Standardlimit von 255 Zeichen auf String-Spalten.

Und dieser Kommentar an die jeweiligen Rails Pull Request 14579:

Die db/schema.rb genau verwendet wird, die Datenbank neu erstellen. Alle Ihre String-Spalten wurden vor 4.2 mit einem impliziten Limit von 255 hinzugefügt. Zu diesem Zeitpunkt war es nicht notwendig, das Limit auf db/schema.rb zu legen, weil es der Standardwert war. Jetzt haben wir den Standardwert auf kein Limit geändert. Wir müssen diese Grenzen löschen, um die Datenbank neu zu erstellen.

Das Problem ist kein neuer Standard, sondern ein Spiegelbild des alten.

Um das Problem zu beheben, würde ich vorschlagen, eine Migration durchzuführen, die die Grenzen aus den relevanten Feldern fallen lassen und dann schema.rb aus der Datenbank neu erstellen würde. Dies sollte zu einem neuen konsistenten Zustand führen.

+0

okay, danke für die Antwort. Ich werde meine Behauptung wiederholen, dass in der aktuellen Datenbank das Limit für ein Feld 8 ist und dann im neu generierten schema.rb jetzt 4. Ich wette, ich habe dort gerade etwas übersehen. – jaydel

Verwandte Themen