Rails6 CSS/JavaScript/画像の変更が反映されない assets:precompile


 開発環境で行った変更を本番環境でも反映させようとしたら、全然してくれなかった。

環境

AWS(EC2)
puma, Nginx
Ruby 2.6.6, Rails 6.0.3.2

起こった問題

「よーし。開発環境でそこそこにまとまったし、リモートからpullして本番環境でも反映してやろーっと。」

qiita.rb
$ bundle exec rails assets:precompile RAILS_ENV=production

[1/4] Resolving packages...
[2/4] Fetching packages...

なんやかんや


Everything's up-to-date. Nothing to do

「なんやて。Nothing to doやと? 仕事サボんなやゴラぁぁぁああぁ」

悪の根源

それはwebpackerである。
こーいう時の問題は大体こいつとのこと。
ディレクトリ内のtmpを消してみたりpublic/packs/js以下を消してみたりするとうまくいくケースがあるみたい。

実は以前にもwebpacker関連で苦労してんな。
https://qiita.com/ashketcham/items/48d64e960d436f8b6f78

早速消し去ってやる

と、言っても完璧に消し去るのは怖いので別名で残しておく。
(後々に役に立ったのであーる)

qiita.rb
$ mv public/packs/js public/packs/js_bak
$ mv tmp tmp_bak

再挑戦

qiita.rb
$ bundle exec rails assets:precompile RAILS_ENV=production

なんやかんや

Compiling...
Compiled all packs in /home/ec2-user/FANTRA/public/packs

できた!!!!!!!!!

さぁブラウザを開いて確認や

デプロイしてから一番大嫌いな画面が出てきた。
この画面で綺麗な女性とか猫とか色々癒してくれる画像に変えて欲しい。。。

デプロイしてから学んだから、冷静にログを確認。

qiita.rb
$ sudo tail -f /var/log/nginx/error.log
/tmp/sockets/puma.sock failed (2: No such file or directory)

tmp以下がないと起こってる。
ここで念のために別名で残していた、tmp_bakが役に立つ!!!!
ついでにpublic/packs/js_bakも。

qiita.rb
$ mv tmp_bak/ tmp
mv public/packs/js_bak/ public/packs/js

念のためrestart

qiita.rb
$ sudo service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

ブラウザを確認すると、綺麗に変更が反映されていた

まとめ

webpackerって厄介やな〜。