Would have removed .. in heroku deploy log

2019-02-16 09:23发布

a few days ago I started to see

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

in my heroku deploy output.

It used to say that it removed the gem.

anyone know what's up with that?

update

heroku updated to latest ruby 1.9.3 and bundler cache cleaned fine.

5条回答
成全新的幸福
2楼-- · 2019-02-16 09:53

This is a bug in the bundler gem – essentially extra debugging info is being dumped to the screen. It should be patched in the next release. The removal would be from a cache, most likely because a newer version is available (latest best_in_place is 2.0.3, Thor 0.17.0). These can be safely ignored.

查看更多
可以哭但决不认输i
3楼-- · 2019-02-16 10:03

This issue has now been fixed with the release of Bundler 1.3.2, which is now in use on Heroku in the latest official Ruby buildpack.

查看更多
贪生不怕死
4楼-- · 2019-02-16 10:03

@Roman explication is correct.

If you have a custom buildpack (or you can easily fork it ans use it) it can be fixed in one line

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

line 408-409 from

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

to

puts "Cleaning up the bundler cache."
pipe "bundle config --delete dry_run"
pipe "bundle clean"

bundle config --delete remove the config (note the underscore) and, by default dry-run is false.

查看更多
Ridiculous、
5楼-- · 2019-02-16 10:05

After some research, it appears this isn't a bug, but a feature!

as you can see here https://github.com/carlhuda/bundler/pull/2237

a dry_run flag has been implmented to act as if gems would have been removed and instead of removing them it just prints that

the actual code is 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

as you can see, if dry_run it prints thats. else it removes the gem

so as this is a feature and not a bug, it is not going to be fixed any time soon. This leaves a question for heroku (which I am waiting for a reply) as to why they are using dry_run..

Note for those that aren't aware - This bloats slug size

查看更多
老娘就宠你
6楼-- · 2019-02-16 10:07

That's a bug in Heroku deployment configuration. It writes a file .bundle/config which has a line:

BUNDLE_DRY_RUN: false

When bundler loads this global config file, it translates this to :dry_run => "false" When it checks for this setting, it's checking settings[:dry_run], which is a string, which evaluates to true.

You can remove this line by some shell commands (heroku run bash):

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

And then run

bundle clean
查看更多
登录 后发表回答