herokuでslugsizeが増えた!とりあえずローカルでassets:precompileする

2014-05-07

概要


herokuへのデプロイ中、アプリのslugsizeが前見た時の倍(100MB)になっていて
コーヒーこぼしかけた。

最大サイズギリギリちゃうんかい!とおもったら最大は300Mらしく一安心したけど、
とりあえず調査。

めも


$ heroku run bash --app アプリ名

heroku~ $ du -m -s * 31 app 9 bin 1 config 1 config.ru 2 db 2 doc 1 Gemfile 1 Gemfile.lock 1 lib 1 log 1 Procfile 59 public 1 Rakefile 1 README.md 1 script 1 spec 1 ssl 27 tmp 180 vendor

heroku~/vendor $ du -m -s * 1 assets 144 bundle 1 heroku 1 plugins 36 ruby-1.9.3

/vendor/bundle/ruby/1.9.1 $ du -m -s * 1 bin 1 build_info 2 bundler 1 bundler-1.3.2.gem 1 doc 142 gems 1 specifications

gemがほとんどなんだなーっと。でも最近gem入れてねーっすよ??

ってことは。。。

~/public $ du -m -s *
1   404.html
1   422.html
1   500.html
58  assets
1   favicon.ico
1   mentenance.html
1   robots.txt

。。。assetsの中も圧縮されたデータがハッシュ付きで入ってるしなー。
いままでassets:precompileをdeploy時にやっていたので、これを機にローカルでやるように切り替えよう。

ローカルプリコンパイルを有効にして

heroku labs:enable user-env-compile -a myapp

プリコンパイルして

RAILS_ENV=production bundle exec rake assets:precompile

デプロイ!

Asset precompilation completed (162.43s)

これが

Detected manifest.yml, assuming assets were compiled locally

こうなる。yay!

でも、slugsizeは変わりません。。。。

調査の結果、次のようなやり方で解決しました。

asset_sync使ってprecompileしたassetsgがs3にあげてあるのに、

herokuのpublic/assetsにあげられていることが原因だった。

というわけで、ローカルでプリコンパイルの設定を修正しました。

1. gitignoreの見直し

下の二行を追加した。
manifest.ymlにdigest付きの最新ファイルが記述してあり、

herokuではそれをベースにassetの参照先urlを生成しているので、そ
れ以外のassetsファイルをgit管理対象外とする。

public/assets/*
!public/assets/manifest.yml

2. プリコンパイル

rake assets:precompile

一度ステージングのs3を削除しておいたので、全件アップ。
めっちゃ時間かかった。。。

3. herokuにpush

git push heroku master
-----> Preparing app for Rails asset pipeline
       Detected manifest.yml, assuming assets were compiled locally
-----> Discovering process types
       Procfile declares types      -> web, worker
       Default types for Ruby/Rails -> console, rake

-----> Compiled slug size: 59.8MB -----> Launching... done, v134

100M --> 59M

めっちゃへった。ok。

いろいろ試行錯誤してやったので、asset_pipelineのいい勉強になりました。

herokuはslugサイズ10Mを推奨しているらしい。今は69M弱。根本的に減らさないとまずいな。。。

#Rails  #Heroku