会删除.在 Heroku 部署日志中



几天前我开始看到

 Would have removed best_in_place (2.0.2)
 Would have removed thor (0.16.0)

在我的英雄部署输出中。

曾经说它移除了宝石。

有谁知道这是怎么回事?

更新

Heroku 更新到最新的 Ruby 1.9.3 和捆绑器缓存清理正常。

这是 Heroku 部署配置中的一个错误。它写入一个文件.bundle/config,其中有一行:

BUNDLE_DRY_RUN: false

当捆绑器加载此全局配置文件时,它会将其转换为 :d ry_run => "false"当它检查此设置时,它会检查 settings[:d ry_run],这是一个字符串,其计算结果为 true。

您可以通过一些 shell 命令(heroku run bash)删除此行:

mv -f .bundle/config .bundle/config.orig
sed '/BUNDLE_DRY_RUN/d' < .bundle/config.orig > .bundle/config

然后运行

bundle clean

这是捆绑程序 gem 中的一个错误——本质上是额外的调试信息被转储到屏幕上。它应该在下一个版本中修补。删除将从缓存中,很可能是因为有更新的版本可用(最新best_in_place是 2.0.3,Thor 0.17.0)。这些可以安全地忽略。

经过一些研究,这似乎不是一个错误,而是一个功能!

正如你在这里看到的 https://github.com/carlhuda/bundler/pull/2237

一面dry_run旗帜被施加,就像宝石会被

移除一样,而不是移除它们,它只是打印

实际代码在这里

 if Bundler.settings[:dry_run]
          Bundler.ui.info "Would have removed #{output}"
        else
          Bundler.ui.info "Removing #{output}"
          FileUtils.rm_rf(gem_dir)
        end

如您所见,如果dry_run它打印出来,那就是。 否则它会删除宝石

因此,

由于这是一项功能而不是错误,因此不会很快修复。这给heroku留下了一个问题(我正在等待回复),为什么他们使用dry_run。

对于那些不知道的人的注意 - 这膨胀slug大小

@Roman解释是正确的。

如果你有一个自定义的构建包(或者你可以很容易地分叉它并使用它),它可以在一行中修复

https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/ruby.rb

408-409路 从

puts "Cleaning up the bundler cache."
pipe "bundle clean"

puts "Cleaning up the bundler cache."
pipe "bundle config --delete dry_run"
pipe "bundle clean"
捆绑配置 -

-删除 删除配置(注意下划线),默认情况下dry-run为 false。

这个问题现在已经在 Bundler 1.3.2 的发布中得到了修复,现在在最新的官方 Ruby 构建包中在 Heroku 上使用。

相关内容

最新更新