問題
アプリを本番環境にデプロイする過程で、
$ rake assets:precompile RAILS_ENV=production
アセットパイプラインのエラーが生じた。
アセットパイプラインとは?
アセットパイプラインとは、JavaScriptやCSSのアセットを最小化 (minify: スペースや改行を詰めるなど) または圧縮して連結するためのフレームワークです。
アセットパイプラインでは、CoffeeScriptやSass、ERBなど他の言語で記述されたアセットを作成する機能を追加することもできます。
エラー
The asset "application.css" is not present in the asset pipeline.
解決法
# config.assets.js_compressor = :uglifier 変更前
config.assets.js_compressor = Uglifier.new(harmony: true) #変更後
用語の確認
uglifierとは?
RailsのGemfileにはデフォルトでuglifierが含まれています。
このgemは、NodeJSで記述されたUglifyJSをRubyでラップしたものです。
uglifierによる圧縮は次のように行われます。
ホワイトスペースとコメントを除去し、ローカル変数名を短くし、可能であればifとelseを三項演算子に置き換えるなどの細かな最適化を行います。
以下の設定により、JavaScriptの圧縮にuglifierが使用されます。
config.assets.js_compressor = :uglifier
デフォルトは上記の設定だが、uglifierのGithub によれば、
Railsでは下記の設定に置き換えるようにと書いてある。
config.assets.js_compressor = Uglifier.new(harmony: true)
ECMAScriptとは?
ECMAScript(エクマスクリプト)は、JavaScriptの標準であり、Ecma Internationalのもとで標準化手続きなどが行われている。