将在heroku部署日志中删除..

时间:2013-01-26 18:04:19

标签: logging deployment heroku

前几天我开始看

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

在我的heroku部署输出中。

过去常说它删除了宝石。

任何人都知道这是怎么回事?

更新

heroku更新到最新的ruby 1.9.3并且捆绑缓存清理得很好。

5 个答案:

答案 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。