11

Es gibt ein frustrierendes Problem, bei dem meine Rails-Migrationen das Schema mit Leerzeichen und der Position der Tabellenspalten aktualisieren.Die Rails-Migration fügt immer Leerräume ein oder ändert die Reihenfolge der Spalten im Schema

Also die meisten Zeiten, wenn ich bundle exec rake db:migrate ausführen, wird es eines der folgenden Szenarien tun. Wenn ich dies in unseren Hauptzweig einfüge und andere Entwickler damit arbeiten, werden durch die Rails-Migration die Tabs und die Positionsreihenfolge zurückgesetzt.

Wir haben festgestellt, dass alle drei Entwickler im Team das gleiche Problem beim Ausführen einer Migration haben, wenn ich der letzte Programmierer des Schemas war.

Ich habe gerade aktualisiert postgres to v9.2.4 das ist das gleiche wie die anderen Entwickler. Irgendwelche Ideen, was ich noch versuchen könnte?

Beispiele

Im Folgenden sind git diffs zu zeigen, was geschieht.

Beispiel für Nachbestellung des Schemas:

create_table "accounts", :force => true do |t| 
    t.integer "organisation_id" 
- t.boolean "active",    :default => false 
    t.text  "notes" 
+ t.boolean "active",    :default => false 
    end 

Beispiel für das Hinzufügen Registerkarten des Schema:

create_table "comments", :force => true do |t| 
- t.integer "commentable_id", :default => 0 
- t.string "commentable_type", :default => "" 
+ t.integer "commentable_id",  :default => 0 
+ t.string "commentable_type", :default => "" 
- t.datetime "created_at",      :null => false 
- t.datetime "updated_at",      :null => false 
+ t.datetime "created_at",       :null => false 
+ t.datetime "updated_at",       :null => false 
+0

Was lässt Sie denken, dass die Whitespaces Tabs sind? Gibt es eine Chance, die ganze Vorher-Nachher-Version von einer dieser create_tables zu sehen? –

+0

@muistooshort Danke, sie könnten whitespaces – Coderama

+1

Das erste bedeutet nur, dass nicht alle Spalten in der gleichen Reihenfolge in der Datenbank sind, vergleichen Sie die '\ d accounts' Ausgabe in' psql' und Sie werden den Schuldigen finden; Dies kann auf verschiedene Arten geschehen und sollte kein Problem sein. Die zweite ist wahrscheinlich nur eine Ausrichtungssache (d. H., Alle ': default => ...' Optionen werden in einer Linie angeordnet), aber es ist schwer zu sagen, ohne die gesamten Vorher- und Nachher 'schema.rb' Dateien zu sehen. –

Antwort

-12

Sie sollten nur schema.rb von Ihrer Versionskontrolle ignorieren. Es ändert sich je nach Migrationsreihenfolge und wer sie generiert hat, unterschiedlich. Sie benötigen nur die Migrationen, um das entsprechende Schema für jeden am Projekt beteiligten Entwickler zu generieren.

Grüße.

+3

* Korrektur *: Sie sollten ** ** NIE ** schema.rb von Ihrer Versionskontrolle ignorieren. http://stackoverflow.com/questions/6520017/is-it-a-good-idea-to-put-db-schema-rb-to-gitignore-list – Dorian

0

Ich vermute, dass dieser Fehler durch die unterschiedliche Konfiguration von Leerstellen verursacht wird ('tab width', wenn Sie sublime verwenden).

2

Ich baute ein Juwel, um dieses Problem zu lösen.

Es sortiert Spalten, Indexnamen und Fremdschlüssel, entfernt überflüssige Leerzeichen und führt Rubocop für einige Formatierungen aus, um die Ausgabe Ihrer schema.rb-Datei zu vereinheitlichen.

https://github.com/jakeonrails/fix-db-schema-conflicts

Nachdem Sie es zu Ihrem Gemfile fügen Sie einfach laufen rake db: wandern oder rake db: schema: wie normale Dump.

+1

Danke! Dies sollte in Rails Kern sein – mahemoff

+0

Prost, froh, dass es jemand da draußen geholfen hat! – jakeonrails

+2

@jakeonrails Ich habe das ganz zufällig gefunden. Ich vermute, dass das Hinzufügen des Wortes "Sortieren" zu dem Namen deines Edelsteins zusätzliche Aufmerksamkeit bekommen würde. Gute Arbeit, Danke! – user3763682