【问题标题】:Heroku bundler not deleting old gems versions [duplicate]Heroku bundler 不删除旧的 gems 版本 [重复]
【发布时间】:2013-02-14 20:15:40
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

这是 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 为假。 结果

      Removing bson_ext (1.8.2)

【讨论】:

    【解决方案2】:

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

    bundle update
    

    查看详情Here

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

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

    gem 'bson', '1.8.2'
    

    【讨论】:

    • 这就是我所做的,我的本地实例是“干净的”。问题仅出现在 Heroku 上的实时实例上
    • 您确定您的 gemlock 文件包含在您的 git 存储库中吗?
    • 是的。否则 Heroku 将无法编译
    • 已更改我的答案,显示如何在 Gemfile 中强制使用 gem 版本
    • 我在从 gemfile 中删除的 gem 上收到了相同的消息。也许 Heroku 只是为了“安全”,将旧宝石保留一段时间?它似乎不影响应用程序。我知道 ruby​​gems.com 最近遇到了一些问题docs.google.com/document/d/…
    【解决方案3】:

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

    【讨论】:

    • 这确实是来自 Bundler 的消息。但是旧的 gem(上例中的 bson 1.5.2)仍然安装在我的 slug 中(增加了它的大小,即使是一点点)。
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多