11

我的 Heroku 应用程序开始碰壁了。

我很清楚 slug 大小、re: 图像、PDF 和其他材料的正常问题,但我的问题可能与 bower 带来的其他资产或可能构建包有关。

https://devcenter.heroku.com/articles/slug-compiler 多次部署后的 Heroku Slug 大小

我的 Heroku 编译的 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?)

我猜这是 Bower 和 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 Diet)应该是什么样子,任何想法都会非常感激。

更新:

我还尝试从我读到的对其他人有用的内容中重建蛞蝓,但没有效果。编译后的 Slug 大小保持不变。

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

构建要点: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

4

3 回答 3

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。

于 2014-12-16T20:58:14.877 回答
2

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

于 2014-12-17T14:24:30.337 回答
1

部分问题可能指向您的 Gemfile 中的 Git 存储库。有一次,我需要指向一个尚未发布的 Rails 提交,它比指向已发布版本增加了 > 100 MB 到我的 slug 大小。

于 2014-12-15T22:39:49.060 回答