#環境
macOS Big Sur(11.6)
rails 6.1.4
bootstrap5
#崩れるbootstrap
普段はrails sでdevelopment環境で確認しているけど、rails s -e productionで本番環境の挙動を確かめたい。
しかし、開発環境ではBootstrap5がちゃんと表示されていたのに、production環境では体裁が崩れる。
#一応事前にはこちらは済んでます。
$ rails asset:precompile
#なんで?
production.logを見てみると
ActionController::RoutingError (No route matches [GET] "/packs/js/application-81c24075e6920f66b791.js")
とかいうのが延々と出ている。
webpackerのコンパイルがうまくいっていないのか?と思い、以下を実行してもNG。
(実際はrails asset:precompile時点でwebpacker:compileも走る)
$ rails webpacker:compile
#結論
ここ↓の回答にありました。
[RAILS 6 + Webpacker -- route error for packs/css|js/application-* in production environment]
(https://stackoverflow.com/questions/67863081/rails-6-webpacker-route-error-for-packs-cssjs-application-in-production)
"did you set config.public_file_server.enabled to true in production.rb ?"
つまり
config/environments/production.rb の
config.public_file_server.enabled = true にすれば良い。
これによって本来コンパイルされたpublic配下にアクセスできるようになる。
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
#config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.public_file_server.enabled = true
developmentだとrails sの際に勝手にcompileが走るし、apacheやnginxのwebサーバ環境だとすでに値が設定されている。pumaのproduction環境だけでbootstrapが適用されないのはこれが原因でした。めでたし。