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

时间:2013-01-26 03:51:37

标签: ruby-on-rails ruby-on-rails-3 heroku

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

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

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

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

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

任何提示? 谢谢, 马可

3 个答案:

答案 0 :(得分:3)

这是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)

答案 1 :(得分:1)

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

bundle update

查看详情Here

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

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

gem 'bson', '1.8.2'

答案 2 :(得分:0)

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