🙆

Railsでschema.rbのファイルにチーム内で差分が出て困った時の話

2023/02/03に公開

migrateするとschema.rbに差分がいつも出てコードレビュー時に邪魔だった

開発環境: mac のお話

RailsのAPIサーバーをDockerを使わずにローカルで開発していました。
すると下記のようにschema.rbのcreate_tableでcollation情報が人によってついたりつかなかったりする現象に遭遇!

-  create_table "active_storage_attachments", charset: "utf8mb4", force: :cascade do |t|

+  create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_bin", force: :cascade do |t|

毎回migrationを行う度にこのような差分がテーブルごとに大量に出てきてしまうとgitのcommit logが汚れてしまい見辛くなって困っていました。

DBをDocker化してlocalの差分をなくすも...解決せず

DB側(mysql)の設定がローカルで独自で作成してもらったものなのでその差分が出ていると思いDocker化するもなんと、dbをDocker化しても相変わらず差分が出続ける?!

Railsってmysql2をbundle installする時にopensslのオプションを指定していたよね?

そう、原因はこれでした。このopensslのバージョンが違ったりしているとschema.rbに勝手に差分が生まれてしまったようで。mysql2 install などで調べると記事によってコマンドに差異があり、その差異が今回の差分を生み出していました。

もしschema.rbにチーム内で差異が出てしまう場合はプロジェクト直下にある .bundle/configの中身を覗いてみてください。ここに差があるとschema.rbに差分が出ちゃいますよ。

❯ cat .bundle/config
BUNDLE_BUILD__MYSQL2: "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib --with-cppflags=-I/usr/local/opt/openssl@1.1/include"

Discussion