Railsプロジェクトの2つのブランチで作業していて、各プロジェクトに列を追加するための移行があるという問題に遭遇しました。当時、問題を引き起こし、データベースの状態を正しく表すためrake db:migrate:reset
に私だけに頼っていました。schema.rb
ある時点で、ブランチAによって追加された列がブランチBのスキーマに入るという問題に遭遇しました。migrate:reset
オプションではなかったため、スキーマファイルを手動で編集することにしました。基本的に、ブランチBのschema.rbで不要な列をブランチAから削除するこの変更をコミットしました。
ブランチAをマスターにマージした後に問題が発生しました。ブランチBをマスターにリベースしようとしたとき、スキーマファイルの列(マスターにあるために関連するようになりました)を削除するために、Bでそのコミットがまだありました。Gitはこれに対する競合を認識せず、自動マージしました。リベースの最後に、スキーマがマスターにあるものと矛盾していることがわかりました。
私の修正は、スキーマファイルを再度編集し、以前に削除した列をスキーマファイルに手動で追加することです。私の質問は:これは型破りだと考えられていますか?危険な?ハッキー?
現在、1つの列が含まれていますが、これに複数の列の削除/追加が含まれる場合、(危険な?)ソリューションは、より多くの問題とdb/schema.rbの不整合につながる可能性があります。