ruby-on-rails – Heroku bundler不删除旧宝石版本

参见英文答案 > Cleaning up the bundler cache when deploying to heroku2
我只是更新了几个宝石,但是当我推送到heroku,旧的仍然被复制在供应商/捆绑商,我有一个消息
Using bson (1.8.2)
[...]
Would have removed bson (1.5.2)

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

但是,如果我创建一个新的雪松应用程序,并从头开始推送到Heroku,旧的宝石不会被复制到供应商/捆绑包中,并且按预期工作.

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

任何提示
谢谢,
马尔科

解决方法

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

当bundler加载这个全局配置文件时,它会将其转换为:dry_run => “false”当它检查此设置时,它将检查设置[: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"

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)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...