7

私はレールプロジェクトで2つの支店で作業していて、各プロジェクトには列を追加するための移行があります。当時、rake db:migrate:resetは問題を引き起こしました。私は自分のschema.rbに頼って、自分のデータベースの状態を正しく表していました。ある時点で、ブランチAのカラムがブランチBのスキーマに追加されたという問題が発生しました。migrate:resetはオプションではなかったので、私は手動でスキーマファイルを編集することにしました。私はこの変更をコミットしました。これは基本的に、支店Bのschema.rbで必要としなかった支店Aの支柱を削除しました。レールでschema.rbを手作業で編集することは安全だと考えられますか

ブランチAをマスターにマージした後に問題が発生しました。私はブランチBをマスタにリベースしようとしましたが、スキーマファイルの中でカラムを削除するためにコミットしました。 Gitはこれとの衝突を見ておらず、自動マージしました。私のrebaseの終わりに、私はスキーマが私がマスターに持っているものと矛盾していることがわかりました。

私の修正は、スキーマファイルを再度編集し、以前に削除した列を手動でスキーマファイルに追加することです。私の質問です:これは慣習的ではないですか?危険な?ハッキー?

今は1つの列が含まれていますが、これに複数の列の削除/追加が含まれていると、(危険な)解決策により多くの問題やdb/schema.rbの不一致が発生する可能性があります。

答えて

6

通常、schema.rbファイルを編集することは悪い習慣と考えられます。 Rails Guide on Migrationsによると

移行、彼らが得るような強大な、データベーススキーマの信頼できるソースではありません。その役割は、db/schema.rbまたはActive Recordがデータベースを調べて生成するSQLファイルのいずれかになります。それらは編集されるようには設計されておらず、単にデータベースの現在の状態を表しています。スキーマ:ダンプ・タスク、あなたのdb /スキーマを更新するも移行デシベルを呼び出す:デシベルを実行するとこと

注:

schema.rb

あなたが新しい移行を実行するたびに更新されます。 rbファイルを使用してデータベースの構造に一致させます。

ちょっと時間を費やして、schema.rbファイルを元に戻し、最新の移行セットに修正することをおすすめします。

+0

合意。 「rake db:migrate version = xxx」のユーティリティを使いこなし、予約を解除してschema.rbを手動で編集することで、将来の頭痛を引き起こす可能性があります。 – railsdog

関連する問題