とーますメモ

Ruby on Rails / Goなどの学習メモ

【Rails5】アセットパイプライン(Asset Pipeline)についてのまとめ

自分用メモ。

そもそもアセットパイプラインのプリコンパイルとは?

プリコンパイルは、複数のファイルをいっこにまとめて、圧縮して、ファイル名にフィンガープリント(ダイジェスト)をつけて、公開ディレクトリにデプロイする、などの作業と解釈してます。
プリコンパイルされていないアセットは、production環境では見ることができません。配信したいアセットがプリコンパイルの対象になっていることを確認する必要があります。

by Rails Asset Pipelineがうまくいかないときの問題の切り分けかた


自分が思っているProduction環境でのアセットパイプラインの流れ

1)コンパイル対象のファイル(デフォルトだとapplication.jsとapplication.css)を追加
追加することでパイプラインで生成されるファイルを増やすことができる。

2)アセット対象のパスを追加
追加することでコンパイル対象ファイル内に記述することができる。

3)パイプラインから生成されたファイルをstylesheet_link_tagやjavascript_include_tagで読み込む

アセット対象のパスを追加

config/initializers/assets.rb内

Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "images")
Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "stylesheets")
Rails.application.config.assets.paths << Rails.root.join("vendor", "original_assets", "javascripts")

指定したファイルをコンパイル対象にする

Rails.application.config.assets.precompile += %w( user.js admin.js user.css admin.css )

フォント系の問題

外部ライブラリのCSSファイル内で相対パスで書いてある場合、Production環境だと
CSSがapplication.cssに集約されるため、フォントが読み込めなくなる。
その場合は、「絶対パス」に変更するなどの対応が必要になる。

その他トラブルシューティング

以下参照。
Rails Asset Pipelineがうまくいかないときの問題の切り分けかた

作成されたアセットファイル群を消す方法

$ bundle exec rake assets:clobber

現在設定されているassetsのパス

$ bundle exec spring rails c
$> Rails.application.config.assets.paths

プレコンパイル済みのアセットが配置されるディレクトリ

$ bundle exec spring rails c
$> Rails.application.config.assets.prefix