# Rails アップデートでの失敗📝

Rails アップデート(5.1.4 -> 6.0.2.rc1) リリース後に、画像や CSS が読み込まれず、 生の HTML だけが表示されて焦った・・・

# 事象

本番リリース後に静的なアセットが読み込まれていないことに気づいた。

# 原因

環境変数に RAILS_SERVE_STATIC_FILES を設定していないと 静的なアセット(JavaScript, CSS, 画像など)を配信できない。 デフォルトだと Nginx などにおいて配信するが、担当プロジェクトでは Rails から配信していた。

config.publick_file_server.enabled = true

false だと、public 以下のファイルは公開されず、他の配信用サーバーから配信する必要がある。パフォーマンス面から言えば、静的なファイルは Rails からではなく、CDN などで配信する方が良い。

参考:

# 対応

環境変数に、RAILS_SERVE_STATIC_FILES を設定。

# なぜ気づかなかったか

Rails のバージョンを上げた際($ bundle exec rails app:update 実行時)に、 config/environments/production.rb のみ書き換えられていたため。

# config/environments/production.rb

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

担当プロジェクトでは、本番リリース前に staging で動作確認をしており、 config/environments/staging.rb を読み込んでいた。

# config/environments/staging.rb

config.public_file_server.enabled = true

config/environments/staging.rb は書き換えられていなかったので、 問題なく静的アセットが配信されていて、サイトを閲覧できたので、staging で気づくことができなかった。

# 再発防止策

config/environments/production.rbconfig/environments/stagin.rb の中身を同じにする。

  • 中身が同じであれば、staging で気づけた。

stagingproduction の環境変数の差分を把握しておく。

# 参考🔗