27
28

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 5 years have passed since last update.

turbo-sprockets-rails3 で Heroku x Rails3のデプロイ時間を30倍速くする

Last updated at Posted at 2013-06-25

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!!

27
28
2

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
27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?