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.7
、Ruby 2.7.2
、bundler 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
控制它。
可能的解决方案很少:
使用 Mac 的同事可以尝试 update bundler
如果他们使用旧版本 bundler
。
从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
我的 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.7
、Ruby 2.7.2
、bundler 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
控制它。
可能的解决方案很少:
使用 Mac 的同事可以尝试 update
bundler
如果他们使用旧版本bundler
。从
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