環境
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