捆绑安装不遵守 Gemfile.lock

bundle install does not respect Gemfile.lock

我在安装包时遇到了一些问题。

当我们 运行 'bundle install' 时,Gemfile.lock 中的依赖项 gem 之一会自动升级。 根据理论,“捆绑安装”将查找 Gemfile.lock 版本并且不会解析版本并将安装相同的版本。只有当没有 Gemfile.lock 或我们给出“bundle update”时才会解决。

在我们的服务器中,我们有 Gemfile.lock 但“捆绑安装”更新了特定 gem 提到的 gemfile.lock(它是一个依赖项 gem,所以我们没有指定在 gem 文件中),它不应该像这样发生,因为锁定文件中已经存在一个版本,即使该版本已自动更新,由于此升级,站点中的一些主要功能被破坏。

供您参考: 捆绑器版本 - 1.17.2 ruby 版本 - 2.5.3 gem 版本 - 2.7.6 rails 版本 - 5.2.3 该依赖项 gem 名称为“nokogiri”,此 gem 锁定为 1.11.7,但当我提供“bundle install”

时它已更新为“1.12.1”

有什么想法可以防止将来出现这个问题吗?

首先,如果您分享 Gemfile.lock 错误以便了解我可能导致升级的具体原因,那就太好了。但从远处看,我认为正如你所说,这个 gem 是一个依赖项 gem,它没有在你的 gem 文件中说明。可能是另一个 gem 也依赖于此 gem 并且根据该要求它甚至在您假定的 gem 行是 运行 之前触发升级,这可能会导致错误.仔细阅读错误,您可以找出导致此错误的 gem(s)。

在你更新后我已经阅读了这方面的内容。 正如前面所述,这些 gem 之一可能是您的特定 gem 在每次安装捆绑器时都会更新的原因。不幸的是,没有真正的转机来解决这个问题,但 bundler 确实提供了一种解决方法。 您可以将 --frozen 选项与捆绑器一起使用,它将您的 gemfile.lock 冻结到每个 gem 的当前版本,并且不会更新任何 gem,但只会安装新的 gem你有。不幸的是,这已被弃用,只能从 /.bundle/config 完成。这可以从项目根目录中的命令行完成。 运行 bundle config frozen true 冻结捆绑程序在 gemfile.lock 中更新您的 gem 您可能必须向您的用户授予写入权限才能编辑捆绑包配置。 我也找到了这篇文章from bigbinary.com