2014-12-10 18 views
10

Heroku uygulamasında bir duvara vurmaya başladım.Heroku ve sülük boyutu bloat

Sümük boyutu, yeniden: resimler, PDF'ler ve diğer materyallerle ilgili normal sorunların farkındayım, ancak sorunum muhtemelen büyük olasılıkla bir araya getirilen veya muhtemelen paketler oluşturarak diğer varlıkların etrafında dönüyor.

$ du -h --max-depth=1

4.0K ./.bower-tmp 
30M ./tmp 
24K ./features 
236K ./config 
195M ./public 
4.0K ./log 
34M ./bin 
792K ./db 
355M ./vendor 
8.0K ./.heroku 
22M ./app 
64K ./lib 
8.0K ./.bundle 
136K ./.bower-registry 
22M ./.bower-cache 
24M ./node_modules 
12K ./.profile.d 

kadar yaptığı en büyük Vendor (355M), fakat benim yerel satıcı klasör boş aslında: Heroku Slug Size After Multiple Deployments

https://devcenter.heroku.com/articles/slug-compiler My Heroku şöyle sümüklüböcek görünüyor compliled kamuya açık olduğu gibi (195M). Ben tahmin ediyorum

40M vendor/ruby-2.0.0 
21M vendor/node 
32K vendor/heroku 
12K vendor/assets 
103M vendor/jvm 
192M vendor/bundle 

195M public/assets (bower bloat?) 

çardağımıza için ve PDF nesil için çeşitli yap paketleri biridir: gibi

Ama Heroku üzerinde görünüyor.

https://github.com/heroku/heroku-buildpack-nodejs 
https://github.com/heroku/heroku-buildpack-ruby 
https://github.com/razorfly/wkhtmltopdf-buildpack 

Uygulamamın kendisi 22M'de lean-ish görünüyor, ancak şu anki heroku SLUG'ım 298.4MB'dur! ve tek başına satıcı dizini du'a göre olduğundan daha fazladır, bu derleme paketlerini kullanmamalı ve bunun yerine yerel makinemdeki varlık derlemesine geçiş yapmalı mıyım? İyi bir dağıtım stratejisinin (/ sümükle beslenmenin) neye benzemesi gerektiğinden emin değilim, herhangi bir fikir büyük ölçüde takdir edilecektir.

GÜNCELLEME: Ben de başkaları için çalışmış okumak ne sümüklüböcek yeniden çalıştı

, ancak hiçbir etkisi. Derleme sonrası sülük boyutu aynı kaldı. yapılı

heroku plugins:install https://github.com/heroku/heroku-repo.git 
heroku repo:rebuild -a appname 

GIST:

12K ./.profile.d 
21M ./app 
4.0K ./log 
812K ./db 
8.0K ./.heroku 
236K ./config 
195M ./public 
19M ./.bower-cache 
60K ./lib 
253M ./vendor 
4.0K ./.bower-tmp 
128K ./.bower-registry 
34M ./bin 
30M ./tmp 
24M ./node_modules 
24K ./features 
8.0K ./.bundle 

Vendor (drorb tarafından sunulan mükemmel bir fikir izledikten sonra) https://gist.github.com/holden/b4721fc798bdaddf52c6

GÜNCELLEME 2

12K vendor/assets 
193M vendor/bundle 
21M vendor/node 
32K vendor/heroku 
40M vendor/ruby-2.0.0 

Kamu/Varlıklar (çok uzun)

https://gist.github.com/holden/ee67918c79dd3d197a6b

cevap

3

vendor/jvm boyutu 103M'dir. JRuby kullanmadığınız için yui-compressor gem kullanıyor olmanın tek nedeni. heroku-buildpack-ruby baktığımızda o JVM bu durumda yüklü olduğunu görünüyor: Eğer yui-kompresör kullanarak önleyebilirsiniz

def post_bundler 
    if bundler.has_gem?('yui-compressor') && !ruby_version.jruby? 
    install_jvm(true) 
    ENV["PATH"] += ":bin" 
    end 
end 

Eğer sülük boyutuna 103m kaydetmek gerekir.

+0

YUI'yi kaldırdım ve 60MB'yi traş ettim, teşekkürler! Benim sümük hala 235MB fazla kilolu, başka harika fikirler? ;-) – ere

+0

Güncellenen klasör boyutlarını paylaşabilir misiniz? sonraki adaylar kamu/varlık ve kamu/varlık olacaktı –

+0

Güncelleme. Kamu/varlık klasörü hemen hemen tüm Bower ilgili varlıklarıdır. Sorun şu ki, onu bower.json'ımdan kaldırdıktan sonra bile kütüphaneleri kaldırıyor gibi görünmüyor (örneğin Hexaflip çoktan öldü, ancak hala varlıklar içinde.) – ere

1

Sorunun bir kısmı, Gemfile öğenizdeki Git reposlarını işaret ediyor olabilir. Bir noktada serbest bırakılmayan bir Rails taahhüdünü işaret etmem gerekiyordu ve serbest bırakılmış bir versiyona işaret ederek slug boyutuma 100 MB ekledim.

2

FWIW, Bower'ı uygulamamızdan kaldırdık ve Rails Assets çerçeveyle değiştirdik. Bir Rails uygulamasında Bower'ı kullanmanın Bundler'ın esasen aynı işlevi yerine getirmesiyle bir anlam ifade etmediği sonucuna vardık.

+0

Ayrıca Rails Assets'i 2 ya da 3 ay önce denedik ama Bower ile aynı sorunları yaşadıklarını, ancak spesifikasyonlar üzerinde daha az kontrol sahibi olduğumuzu gördük. – ere