11

私のレールの移行でスキーマが空白とテーブルの列の位置で更新されるという不満があります。Railsの移行では、常に空白を挿入するか、スキーマ内の列の順序を変更する

ほとんどの場合、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 
+0

空白がタブであると思われる理由は何ですか?これらの 'create_table'のバージョンの前後に全体を見るチャンスはありますか? –

+0

@muistooshortありがとう、それらは空白になる可能性があります – Coderama

+1

最初のものは、誰の列もデータベース内で同じ順序ではなく、 'psql'内の' \ d accounts'出力を比較すると、犯人が見つかります。これはいろいろな形で起こる可能性があり、問題ではありません。 2つ目はアラインメントだけです(つまり、 ':default => ...'すべてのオプションを整列させます)。しかし、 'schema.rb'ファイルの前後に全体を見ることなしには分かりません。 –

答えて

-12

あなたは自分のバージョンコントロールからschema.rbを無視すべきです。マイグレーションの順番や作成者によって、それは異なって変化します。プロジェクトに関係する開発者ごとに適切なスキーマを生成するには、移行が必要です。

よろしくお願いいたします。

+3

*修正*:バージョン管理からschema.rbを無視してはなりません**。 http://stackoverflow.com/questions/6520017/is-it-a-good-idea-to-put-db-schema-rb-to-gitignore-list – Dorian

0

このエラーは、異なる設定の白い空白(昇華を使用している場合は「タブの幅」)によって発生すると考えられます。

2

私はこの問題を解決するために宝石を作りました。

カラム、インデックス名、外部キーをソートし、余分な余白を削除し、schema.rbファイルの出力を統一するためにRubocopを実行します。

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

はあなただけの実行すくいデシベルあなたのGemfileに追加した後:移行またはすくいデシベル:スキーマ:通常のようにダンプします。

+1

ありがとうございました!これはRailsのコアにあるべきです – mahemoff

+0

乾杯、うれしいことに、そこに誰かを助けました! – jakeonrails

+2

@ jakeonrails私はこれを全然偶然見つけました。私はあなたに宝石の名前を「並べ替える」という言葉を追加することがそれにさらなる注意を払うだろうと思う。素晴らしい仕事、ありがとう! – user3763682

関連する問題