【Rails】production環境でCSS等が反映されないとき(ActionController::RoutingError (No route matches [GET] ....


環境

Ruby 3.0.2
Rails 6.1

問題

CSSなどをプリコンパイルの対象に指定し,コンパイル実行後にproduction環境にてページを表示してみたらCSS等の設定が全く反映されていなかった.また,ログ(log/production.log)を確認してみると

ActionController::RoutingError (No route matches [GET] "/assets/ ... .css"):

のようなメッセージが残っていた.

解決方法

まず,コンパイルするときに環境を指定していなかったのが問題だった.以下のように,環境を指定してコンパイルをする.

$ RAILS_ENV=production bundle exec rails assets:precompile

なお,bundle exec railsの部分は環境構築のしかたによって適宜変えて実行すべきところだろう.

次に,config/environments/production.rbを開き,config.public_file_server_enabledに直接trueを指定する(コメントアウトしてある部分は,もともとあった記述).

# config.public_file_server_enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.public_file_server_enabled = true

以上で,自分の場合は問題が解決した.

参考

<問題の解決に役立ったサイト>
[プリコンパイルの方法について(2015年の記事.古い)]
https://blog.naichilab.com/entry/2015/11/08/005606
[No route matches [GET] /assets について(質問と回答)]
https://coderedirect.com/questions/99092/no-route-matches-get-assets

<より深く理解するために>
[アセットパイプライン]
https://railsguides.jp/asset_pipeline.html