Shoken Startup Blog

KitchHike Founder/CTO

Rails 4にアップグレードするとassets:precompile しても minify されない

f:id:sfujisak:20140520215417p:plain

問題

Rails 3 ではassets:precompileすると、jsファイルの連結 + minifyされて改行や空白が削除されていたのだが、Rails 4にすると連結はされるがminifyされなくなった。

解決策

Sprocketsのキャッシュをクリアする。

bundle exec rake tmp:cache:clear

public/assets/*.jsを削除するか、config/environments/production.rb でconfig.assets.js_compressorを変更する。

rm public/assets/*js

その後、assets:precompileでjsファイルが作成されていることを確認する。

$ bundle exec rake assets:precompile RAILS_ENV=production --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Execute assets:precompile
I, [2014-05-20T10:36:09.047520 #20568]  INFO -- : Writing /home/rails/public/assets/application-311212e42fdbdedd7b0af4927xxxxxxx.js

補足: js_compressorはどれを使えば良い?

Rails Asset Pipelineのconfig.assets.js_compressorを変更してみた。

http://guides.rubyonrails.org/asset_pipeline.html#javascript-compression

Googleが提供しているWebサイトのアクセス速度を解析してくれるPageSpeed Insightsで調査した。 結果はuglifierが一番良かった。

  • uglifier : 一番圧縮率が高い。PageSpeedでは合格となった。
  • closure : Googleが作っているが、PageSpeedではあと2%圧縮できますという結果に。
  • yui : Yahooが作っている。手元のMac OSXでエラーになるので今回は未調査。Linuxではコンパイルできた。

参考

How to clear Sprockets cache? - Stack Overflow

Rails で assets:precompile しても minify されない場合の対処 - ichiroc subset