Heroku捆绑器不删除旧gem版本

我刚刚更新了几个gem,但是当我推送到heroku时,旧的仍然被复制到vendor / bundler中并且我有一条消息

Using bson (1.8.2) [...] Would have removed bson (1.5.2) 

实际上,在vendor / bundler中,旧的gem仍然被复制。

但是,如果我创建一个新的雪松应用程序并从头开始推送到Heroku,那么旧的gem不会被复制到vendor / bundle中,它会按预期工作。

旧的gem版本既不在Gemfile中也不在Gemfile.lock中,所以我不明白heroku bundler在哪里得到这个(过时的)信息。

任何提示? 谢谢,马可

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

 BUNDLE_DRY_RUN: false 

当bundler加载此全局配置文件时,它将其转换为:dry_run => "false"当它检查此设置时,它检查设置[:dry_run],这是一个字符串,其值为true。

感谢@Roman在类似线程中的答案

我的解决方案是(因为我有一个自定义的buildpack)来修补它

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。 结果

  Removing bson_ext (1.8.2) 

在您的开发实例上,您可以尝试。

 bundle update 

详情请见这里

然后将更改提交给Git,然后将您的应用程序推送到Heroku。

如果问题只出在一个GEM上,那么您可以尝试强制Gemfile中的版本号。

 gem 'bson', '1.8.2' 

“可能已删除…”消息可能来自Bundler意外发布的调试消息。 它们可以安全地被忽略,如果尚未修复,则不应出现在下一个版本中。