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

问题描述

我的 Rails 6 项目使用了一些安装 grpc gem 的 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 与我的操作系统不兼容。>

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

gem 'grpc','1.32.0'

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

解决方法

如果有人遇到这种情况。这是一个已知错误,已在捆绑程序版本 v2.2.11

中修复

来自:How to change the version of bundler used in Cloud Functions deployment?

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

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

,

我在 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)

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

从安装日志来看,我的bundler版本会根据操作系统版本选择合适的版本,所以你不能通过Gemfile来控制它。

很少有可能的解决方案是:

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...