14

私のレール移行が空白とテーブルの列の位置でスキーマを更新するというイライラする問題があります。

そのため、ほとんどの場合、実行bundle exec rake db:migrateすると以下のシナリオのいずれかが実行されます。これをメインブランチにマージし、他の開発者がこれに取り掛かると、レールの移行によりタブと位置の順序が元に戻ります。

チームの 3 人の開発者全員が、スキーマの最後のコミッターであった場合、移行を実行するときに同じ問題を抱えていることに気付きました。

postgres to v9.2.4他の開発者と同じように更新しました。他に何を試すことができるかについてのアイデアはありますか?

以下は、何が起こっているかを示すための git diff です。

スキーマの並べ替えの例:

   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

スキーマにタブを追加する例:

   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
4

4 に答える 4

5

この問題を解決するために gem を作成しました。

列、インデックス名、および外部キーをソートし、余分な空白を削除し、Ruboco を実行して書式設定を行い、schema.rb ファイルの出力を統一します。

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

それを Gemfile に追加したら、通常どおり rake db:migrate または rake db:schema:dump を実行します。

于 2014-12-02T01:15:46.333 に答える
-15

バージョン管理から schema.rb を無視する必要があります。移行の順序と誰が移行を生成したかによって異なります。プロジェクトに関与する各開発者に適切なスキーマを生成するための移行のみが必要です。

よろしく。

于 2013-11-01T22:24:17.857 に答える