Closed unikounio closed 7 months ago
db/schema.rbにマイグレーションファイルによって生成されたもの以外の記述が含まれているようなので、その記述を削除したいです。
こちら、どういう意味でしょうか?
この辺と同じかな? Q&A: rails db:migrate すると schema.rb の「limit: 255」が消えてしまう | FBC
@komagata さん ご確認ありがとうございます✨ 理解不足で正しい説明ができていなかったようです💧
おっしゃる通り、ご提示いただいたQ&Aで起こっていることと同じだと思われます。 以下、自分の認識とお伝えしたいことを再度整理してみました。 ズレている箇所等あろうかと思いますので、ご教示いただけますと幸いです🙏
mainブランチでbin/rails db:drop
したあとに、
bin/rails db:create db:migrate
したとき: db/schema.rb
に差分が発生するbin/rails db:setup
したとき: db/schema.rb
に差分が発生しないという状況になっています。
結構前からこの状態になっていたようなのですが、操作次第で解消したように見えるので、疑問が出てもすぐに解決とされていたようです。
おそらく、DBを作成する際README通りにbin/setup
を使った場合は、その後にbin/rails db:migrate
しても、もう1度bin/setup
しても、db/schema.rb
に差分が発生しないからではないでしょうか。
bin/setup
するとdb/schema.rb
に差分が発生しなくなるのか私の結論としては、「差分が発生するはずのマイグレーションファイルが適用されなくなるから」です。
これは、db/schema.rb
の記述がdb/migrate
ディレクトリ内のすべてのマイグレーションファイルを適用した場合とは異なっている一方、db/schema.rb
のバージョンがマイグレーションファイルのバージョンと一致する形で書かれているために起こっているようです。
以下に各コマンド実行時に起きていることを時系列で整理してみました。
db:setup
を実行
bin/rails db:prepare
が実行される
bin/rails db:setup
と同様の処理が実行される
rails db:create
でDB作成rails db:schema:load
でschema.rb
から直接テーブル作成
schema_migrations
テーブルが生成され、schema.rb
のバージョン情報が記録されるrails db:seed
bin/rails db:migrate
またはbin/setup
を実行
※ このとき、 bin/rails db:migrate
とbin/rails db:prepare
は同様の処理をする
schema_migrations
テーブルとdb/migrate
ディレクトリ内のすべてのマイグレーションファイルを調べ、データベースの現在のバージョンと異なるバージョンがあるか照合するschema_migrations
テーブルとマイグレーションファイルのバージョン情報が一致しているので、マイグレーションファイルが適用されず、差分もでないbin/rails db:drop
したあとに
bin/rails db:create db:migrate
bin/rails db:setup
どちらを実行してもdb/schema.rb
に差分が出ないようにしたいです。
そのために、db/schema.rb
の記述をdb/migrate
ディレクトリ内のすべてのマイグレーションファイルを適用した場合と一致させたいです。
長々と書いてしまって読みにくい部分もあろうかと思いますが、何卒よろしくお願いいたします🙏
@unikounio schema.rbを作り直す処理をしてるか、してないかの差だと思います。
そして作り直した場合になんでlmit~が外れるかは僕もわかっていません。(カラムの並び順が違うという場合もあったとおもいます) 以前 @JunichiIto さんが調べてくださってその時もはっきりとはわからなかったとおもいます。(僕の記憶が確かならば・・・)
多分postgresqlのバージョンによってlimit~がついたり外れたり、カラム名の並び順が違ったりするんだと思います。
@komagata さん ご確認ありがとうございます!
そして作り直した場合になんでlmit~が外れるかは僕もわかっていません。
この点、調べていく中で関連しそうなコミットがいくつかありました。 以下、ご意見をいただきたい点と合わせて共有させていただきます。
komagataさん的にschema.rb
ファイルの状態がどうあるべきと考えていらっしゃるのかをお伺いしたいです。
schema.rb
を作り直す処理をして生じた差分をmainブランチにコミットするdb/migrate
に沿ったschema.rb
になっていたschema.rb
の変更が行われたdb/migrate
に沿った schema.rb
に戻った関連コミットの共有漏れ等、こちらのコメントに不備が多くて申し訳ないです💧 よろしくお願いいたします🙏
@unikounio
komagataさん的にschema.rbファイルの状態がどうあるべきと考えていらっしゃるのかをお伺いしたいです。
lmit~がついている状態が正
です。
@unikounio さんが触る前の状態を維持してください。今までもその状態で維持しており、今回のようなPRはたくさんありました。不要な変更点はcommitしなければ大丈夫です。commitは行単位でできます。
@komagata さん なるほどです。 変更不要ということかと思いますので、本IssueはCloseさせていただきます。 ここまでご対応いただきましてありがとうございました🙏
@komagata
単純に疑問に思ったんですが、もしpostgresqlのバージョンによって挙動が変わるならdockerを使ってバージョンを指定した方が良いと思うんですがやらない理由があったりするんでしょうか?環境によって挙動が変わるのは普通に困るはずなので、管理出来るなら管理した方が良さそうに見えます。(正直dockerのことはよく分かってないです)
PS. 間違えてschema.rbの変更加えてすみませんでした
@dowdiness dockerのカリキュラムがbootcampにないからです。 卒業までの期間が長くなりすぎてしまう問題があり、dockerのカリキュラムはまだ導入していません。
概要
mainブランチを
bin/rails db:migrate
するとdb/schema.rb
に差分が出るようになっています。db/schema.rb
にマイグレーションファイルによって生成されたもの以外の記述が含まれているようなので、その記述を削除したいです。スクリーンショット