前几天我开始看
Would have removed best_in_place (2.0.2)
Would have removed thor (0.16.0)
在我的heroku部署输出中。
过去常说它删除了宝石。
任何人都知道这是怎么回事?
更新
heroku更新到最新的ruby 1.9.3并且捆绑缓存清理得很好。
答案 0 :(得分:13)
这是Heroku部署配置中的一个错误。 它写了一个文件.bundle / config,它有一行:
BUNDLE_DRY_RUN: false
当bundler加载此全局配置文件时,它会将其转换为:dry_run => “假” 当它检查此设置时,它检查设置[:dry_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
答案 1 :(得分:10)
这是bundler gem中的一个错误 - 本质上是将额外的调试信息转储到屏幕上。它应该在下一个版本中打补丁。删除将来自缓存,很可能是因为有更新版本可用(最新best_in_place
是2.0.3,Thor
0.17.0)。这些可以安全地忽略。
答案 2 :(得分:6)
经过一番研究,看来这不是一个错误,而是一个功能!
正如您在此处所见https://github.com/carlhuda/bundler/pull/2237
一个dry_run
标志已经被标记为好像已经删除了宝石,而不是删除它只是打印出来
实际代码为here
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它会打印出来。否则它会移除宝石
因为这是一个功能,而不是一个bug,它不会很快修复。这给heroku留下了一个问题(我正在等待回复),为什么他们使用dry_run ..
对于那些不知道的人 - 请注意这个膨胀slug
大小
答案 3 :(得分:4)
@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"
bundle config --delete删除配置(注意下划线),默认情况下dry-run
为false。
答案 4 :(得分:2)
Bundler 1.3.2的发布现已解决了这个问题,现在正在最新的官方Ruby buildpack中使用Heroku。