Rails3のassets:precompileは遅い!
HerokuもRailsも便利ですが、本番環境にデプロイするときに実行されるassets:precompileの速度はお世辞にも速いとは言えません。
Twitter BootstrapやらjQueryプラグインやら、なんやらかんやらでViewにお化粧を厚塗りしていくと、assets:precompileの時間だけで3分以上かかることも珍しくありません。
僕の場合、毎回確実にassets:precompileに10分以上かかってしまい、時々Herokuの15分という上限を超えてしまうRails appもありました。
なので、「ちょっとした修正をデプロイしたいだけなのに、こんなに待たされるのはもう勘弁!!」という悩みを抱えていました。
turbo-sprockets-rails3で簡単に爆速化!!
そんなときに見つけたのがturbo-sprockets-rails3というGemです。
これを使うと変更があったassetsだけを再コンパイルするので、assets:precompileの時間をぐっと短縮することができます。
使い方
使い方は簡単です。
Herokuで使うときはこんな感じで、GemとHerokuの環境変数を追加するだけです。
# Gemfileにturbo-sprockets-rails3を追加
group :assets do
gem 'turbo-sprockets-rails3'
end
# Herokuに以下の環境変数を追加
$ heroku config:set BUILDPACK_URL=https://github.com/ndbroadbent/heroku-buildpack-turbo-sprockets.git
あとはHerokuにデプロイするだけでおしまいです。
最初のデプロイは全assetsがprecompileされるので、導入前と同じぐらいの時間がかかりますが、それ以降はassets:precompileの時間がぐんと短縮されます。(assetsに大きな変更がない限り)
Before/After比較
導入の前後でassets:precompileにかかる時間を比較すると、これぐらいの違いが出てきます。
# 導入前
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
Asset precompilation completed (751.95s)
# 導入後
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
Asset precompilation completed (24.34s)
このようにassets:precompileがすぐ終わるようになったので、躊躇せずにデプロイが行えるようになりました。
備考: Rails4にすればturbo-sprockets-rails3は不要
Rails4ではデフォルトでこの仕組みが導入されているので、元からassets:precompileが速いらしいです。
なので、この記事はRails3限定(厳密に言うと3.2以上)ということになります。
まとめ
もっと前から使っていれば良かった、turbo-sprockets-rails3!!