16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RailsアプリでCSSの変更が反映されない時の対処【アセットパイプライン】

Last updated at Posted at 2020-01-11

Railsアプリケーションのレイアウトを修正しても、CSSが反映されない時がある。
そんな時、まずはブラウザのキャッシュを削除するが、それでも反映されないのならアセットパイプラインが原因と考えられる。

CSSなどの静的なファイルは頻繁に変更がされないため、毎回は読み込まれないようになっているらしい。

##開発環境
・Rails 5.2.3
・Ruby 2.5.1
・ConoHa VPS
・CentOS 7.6
・Capistrano3
・Nginx
・Unicorn

##アセットパイプライン

アセットパイプラインとは、JavaScriptやCSSのアセットを最小化または圧縮して連結するためのフレームワークで、アセットの読み込みを高速化するためのもの。
Railsではデフォルトで有効になっている。

##アセットパイプラインの働き
###①変換
Saasで書かれたスタイルシートをCSS形式に変換したり、CoffeeScriptのスクリプトをJavaScriptに変換したりする。
###②圧縮・結合
CSSやJavaScriptの改行や空白を除去してサイズを縮小し(圧縮)、複数のファイルを1つのファイルにまとめる(結合)。
###③キャッシュ
public/assetsディレクトリの下にキャッシュファイルを生成し、ブラウザにはそのキャッシュファイルを送信する。

アセットパイプラインがうまく機能していないと、レイアウトの修正が反映されない。

##通常のデプロイ

まずは通常のデプロイ。

# Capistranoで自動デプロイ
$ git add .
$ git commit -m "layout"
$ git push origin master
$ bundle exec cap production deploy

# サーバー再起動
$ systemctl restart nginx

##CSSの変更が反映されない時の対処

###単にデプロイ時のプリコンパイルがうまくいっていなかっただけの場合
次のコマンドでプリコンパイルを再試行する。

# ローカルでプリコンパイル
$ bundle exec cap production deploy:assets:precompile
# デプロイ
$ bundle exec cap production deploy
# サーバー再起動
$ systemctl restart nginx

解決しなければ次へ進む。

###サーバーで手動プリコンパイル

# サーバーで手動プリコンパイル
$ bundle exec rake assets:precompile RAILS_ENV=production 
# サーバー再起動
$ systemctl restart nginx

##production.rbの設定修正

上記の手順で解決しなければ、プロダクションの設定を変更。
Railsアプリケーション

config/environments/production.rb
config.assets.compile = true #動的コンパイルを有効化
config.assets.css_compressor = :sass # sass-rails gemを使用している場合コメントアウトを外す
config.public_file_server.enabled = true # publicディレクトリ以下のアセットを返す設定

以上。

これでもダメなら、サーバー自体を再起動して、再度デプロイし直す。
それでもダメなら、リバースプロキシの設定を見直す。

##参考
https://railsguides.jp/asset_pipeline.html
https://qiita.com/gymnstcs/items/00ae23b7fdf0c69b57c5
http://thoames.hatenadiary.jp/entry/2018/07/10/225204
https://numb86-tech.hatenablog.com/entry/2018/11/10/002439

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?