Heroku捆绑器不删除旧的宝石版本

10 ruby-on-rails heroku ruby-on-rails-3

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

Using bson (1.8.2)
[...]
Would have removed bson (1.5.2)
Run Code Online (Sandbox Code Playgroud)

事实上,在vendor/bundler中,旧的宝石仍然被复制.

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

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

任何提示?谢谢,马可

小智 3

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

BUNDLE_DRY_RUN: false
Run Code Online (Sandbox Code Playgroud)

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

感谢@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"
Run Code Online (Sandbox Code Playgroud)

    puts "Cleaning up the bundler cache."
    pipe "bundle config --delete dry_run"
    pipe "bundle clean"
Run Code Online (Sandbox Code Playgroud)

Bundle config --delete 删除配置(注意下划线),默认dry-run为 false。作为结果

      Removing bson_ext (1.8.2)
Run Code Online (Sandbox Code Playgroud)