10

我刚刚更新了几个 gem,但是当我推送到 heroku 时,旧的仍然被复制到供应商/捆绑程序中,我有一条消息

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

事实上,在供应商/捆绑器中,旧的宝石仍然被复制。

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

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

有什么提示吗?谢谢,马可

4

3 回答 3

3

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

BUNDLE_DRY_RUN: false

当 bundler 加载此全局配置文件时,它会将其转换为:dry_run => "false"当它检查此设置时,它正在检查 settings[: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)
于 2013-02-14T11:48:52.357 回答
1

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

bundle update

在此处查看详细信息

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

如果问题仅出在单个 GEM 上,那么您可以尝试在 Gemfile 中强制使用版本号。

gem 'bson', '1.8.2'
于 2013-01-26T15:27:01.047 回答
0

“Would have removed...”消息可能来自 Bundler 意外发布的调试消息。它们可以安全地被忽略,并且不应该出现在下一个版本中,如果尚未修复的话。

于 2013-02-11T14:24:23.927 回答