Heroku和slug大小膨胀

时间:2014-12-10 11:50:27

标签: ruby-on-rails ruby-on-rails-4 heroku bower buildpack

我开始使用我的Heroku应用程序撞墙。

我非常清楚slu size尺寸,图片,PDF和其他材料的正常问题,但我的问题可能围绕着由凉亭或可能构建包装带来的其他资产。

https://devcenter.heroku.com/articles/slug-compiler Heroku Slug Size After Multiple Deployments

My Heroku compliled slug看起来像这样:

$ 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

到目前为止,最大的是供应商(355M),但我的本地供应商文件夹实际上是空的(195M)。

但是在heroku上它看起来像:

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?)

我猜测的是用于凉亭和PDF生成的几个构建包之一。

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

我的应用程序本身看起来很瘦22M,但我现在的heroku SLUG是298.4MB!如果我不使用这些构建包,而是在构建之间迁移到本地计算机上的资产编译,那么单独的供应商目录不仅仅是du。我不确定一个好的部署策略(/ slug饮食)应该是什么样的,任何想法都会受到高度赞赏。

更新:

我也试过从我读过的其他人那里重建slu ,,但没有效果。编译后的弹头尺寸保持不变。

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

构建GIST:https://gist.github.com/holden/b4721fc798bdaddf52c6

更新2(遵循drorb提出的优秀想法之后)

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

供应商

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

公共/资产(很长)

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

3 个答案:

答案 0 :(得分:4)

vendor/jvm的大小为103M。既然你没有使用JRuby,我找到它的唯一原因就是使用yui-compressor gem。看看heroku-buildpack-ruby似乎在这种情况下安装了JVM:

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

如果你可以避免使用yui-compressor,你应该能够在你的slug尺寸上节省103M。

答案 1 :(得分:2)

FWIW,我们从应用程序中删除了Bower,并将其替换为Rails Assets框架。我们得出结论,在Rails应用程序中使用Bower有点没有意义,因为Bundler基本上提供相同的功能。

答案 2 :(得分:1)

部分问题可能是指向Gemfile中的Git repos。有一次,我需要指出一个尚未发布的Rails提交,并添加了>指向发布版本时,我的slug大小为100 MB。