Railsの開発環境でassets:precompileは通常不要だが、やってしまったときにBootstrapがブラウザに反映されなくなり、しばらくはまってしまったのでその時にやったことを備忘録で記載します。
環境
macOS Big Sur(11.6.6)rails 6.1.6
Bootstrap 4.5.3
警告
Bootstrapの導入にはWebpackerで入れる場合とassetsに入れる場合とがありますが、前者でやっています。
https://qiita.com/kazutosato/items/d47b7705ee545de4cb1a
原因
開発環境でassets:precompileをしたことにより、public/assetsが生成されてしまい、そちらを見に行ってしまうようになり、以降のcssの変更なども反映されない。Bootstrapも読み込んでいない。
解決
assets:precompileによってできてしまったファイルを削除する。
念のため、
https://interfirm.hatenablog.com/entry/2014/10/24/131503
を参考に、以下(上から3つ)を実行してからファイル削除を行なった。
- bundle exec rails assets:clean
- tmp/cache/assets内のキャッシュを削除
- development.rb内のconfig.assets.debug = falseに変更
- public/assetsを削除
- stylesheets内の.css, .css.mapを削除
順番に見ていきたいと思います。
bundle exec rails assets:clean
$ bundle exec rails assets:clean
Docker環境であれば、appなりwebのコンテナに入ってからbundle exec rails assets:clean実行します。
$ docker exec -it (appやwebの名前) bash
tmp/cache/assets内のキャッシュを削除
アプリ直下にtmpフォルダがありますが、そのフォルダ内のassetsごと削除します。
development.rb内を変更
config.assets.debug = true
となっていれば、falseに変更。
こちらはBootstrap読み込みが成功すれば元に戻して大丈夫です。
public/assetsを削除
assets:precompileで生成されてしまったファイルを削除します。
public内にassetsフォルダがあるとそのフォルダ内を自動的に読みにいってしまうのでassetsごと丸ごと削除します。
stylesheets内の.css, .css.mapを削除
また、app/assets/stylesheets内にもともとあった.scssファイルを元に.css、.css.mapが作成されていると思います(たとえば本番環境ではassets:precompileした後には作成されています)。
たとえば私のアプリ内は以下のようになっていました。
application.css
evaluations.css
evaluations.css.map
evaluations.scss
home.css
home.css.map
home.scss
users.css
users.css.map
users.scss
assets:precompile前は以下でした。
application.css
evaluations.scss
home.scss
users.scss
なので、余計なファイルを削除して、assets:precompile前の状態にします。
警告
application.cssは削除しないでください。
Dockerであればdocker-compose buildし、docker-compose upしてブラウザを確認し直してください。
これでもBootstrapが反映しない場合、キャッシュの可能性もあるので、ブラウザキャッシュをクリアしてためしてみてください。
※5つの手順を踏みましたが、最初の3つを実行しなくてもBootstrapが反映され、cssの変更がふたたび自動で反映される可能性もあると思います。
参考サイト
https://qiita.com/OHKN/items/c3efd4fb91c7bea85e01
https://interfirm.hatenablog.com/entry/2014/10/24/131503
https://qiita.com/gobtktk/items/be7d2e39a41e86545ecf