Rails:处理不同操作系统的不同 gem 版本

Rails: Handling different gem versions for different operating systems

我的 Rails 6 项目使用一些 gem 安装 grpc gem。在我的Gemfile.lock中,gem是这样安装的:

grpc (1.32.0)
  google-protobuf (~> 3.13)
  googleapis-common-protos-types (~> 1.0)

团队中的一个人有Mac。当他们 运行 bundle install 时,除了上面的版本之外,它还会安装 OS X 特定版本的 gem,因此 Gemfile.lock 将如下所示:

grpc (1.32.0)
  google-protobuf (~> 3.13)
  googleapis-common-protos-types (~> 1.0)
grpc (1.32.0-universal-darwin)
  google-protobuf (~> 3.13)
  googleapis-common-protos-types (~> 1.0)

其他 Gemfile 信息:

PLATFORMS
  ruby

RUBY VERSION
   ruby 2.5.7p206

BUNDLED WITH
   2.2.1

我的本地和生产服务器 运行 Linux。当我尝试在本地环境中使用 Gemfile.lock 运行 bundle install 时,bundle install 退出并显示 Killed 消息,大概是因为 gem 与我的 OS.

不兼容

我试过像这样直接将 gem 添加到我的 Gemfile 中:

gem 'grpc', '1.32.0'

但奇怪的是,这似乎只是有时有效。如何更新 Gemfile 以不安装 gem 的 OS X 版本并改用基本版本?

我在 Mac 上进行了测试:macOS 10.15.7Ruby 2.7.2bundler 2.1.4

# Gemfile
gem 'grpc'

# Gemfile.lock
grpc (1.35.0)
      google-protobuf (~> 3.14)
      googleapis-common-protos-types (~> 1.0)

# bundle install log
Fetching grpc 1.35.0 (universal-darwin)
Installing grpc 1.35.0 (universal-darwin)

我在生成的 Gemfile.lock 中没有 grpc (1.35.0-universal-darwin)

从安装日志来看,我的 bundler 版本将 select 基于 OS 版本的正确版本,因此您无法从 Gemfile 控制它。

可能的解决方案很少:

  1. 使用 Mac 的同事可以尝试 update bundler 如果他们使用旧版本 bundler

  2. Gemfile.lock中删除grpc (1.35.0-universal-darwin)相关代码,并告诉使用Mac的同事不要再将其提交给git(如果解决方案 1 不起作用)。

如果有人 运行 参与其中。这是一个已知错误,已在捆绑程序版本 v2.2.11

中修复

发件人:How to change the version of bundler used in Cloud Functions deployment?

这是自 bundler v2.2.8 以来的 bundler 回归。 https://github.com/rubygems/rubygems/issues/4366

修复在这里:https://github.com/rubygems/rubygems/pull/3655