解決したい問題
既存のRailsアプリケーションをバージョンアップする場合、config/application.rb
でconfig.load_defaults
も(どこかのタイミングで)更新する必要があります。
class Application < Rails::Application
# Rails 7.0から7.1にバージョンアップする
- config.load_defaults 7.0
+ config.load_defaults 7.1
しかし、この設定をうっかり更新し忘れて「よし、Rails 7.1にアップデートできたぞ!🙌」と喜んでいたら、実はload_defaults
が7.0のままだった😱という問題が起こる可能性があります。
というか、僕は先日やらかしました、はい😂 (再度Rails 7.1向けのプログラム修正と動作確認を余儀なくされました……)
改善策
この問題に気付きやすくするように、config/application.rb
に以下のコードを追加しました。
config.load_defaults 7.1
+unless config.loaded_config_version.to_f == Rails::VERSION::STRING.to_f
+ warn "Current Rails version is #{Rails::VERSION::STRING}, but loaded config version is #{config.loaded_config_version}"
+end
こうするとアプリケーションの起動時やテストの実行時に以下のような警告が出力されて更新し忘れに気付きやすくなります。
例: Rails 7.1にアップデートしたのにconfig.load_defaults
が7.0のままだった場合
Current Rails version is 7.1.3.4, but loaded config version is 7.0
この対応の考慮点
config.load_defaults
はRailsのバージョンを上げたら必ず同時に上げないといけないものではありません。
状況によってはRails 7.1でもあえてconfig.load_defaults
は7.0のまま本番リリースし、しばらく運用してから7.1に変更する、というケースもありえます。
その場合は「あえて古いバージョンにしているのに毎回警告が出てうっとうしい」というデメリットが発生します。
とはいえ、そのうっとうしさよりも、うっかり更新し忘れる問題の方が怖いので僕はこの設定を入れるようにしました。
まとめ
というわけでこの記事ではRailsのバージョンアップ時にload_defaultsを更新し忘れる問題に気付きやすくするTipsを紹介しました。
僕みたいにうっかり更新し忘れるのはイヤだ!という人は参考にしてみてください。
おまけ
最初は「この警告をRails自身が出してくれたら嬉しいのに」と思いpull requestを送ってみましたが、考慮点に書いたように「あえて古いバージョンを指定するケースもある(というか、その手順が推奨)なのでNG」となりました。残念😭