0

在 Ruby 项目中运行各种命令(例如 bundle 和 rspec)后,Gemfile.lock会更新并x86_64-darwin-17添加到PLATFORMS标题中。为什么会这样?我该如何预防?

运行gem env给出了这个有趣的上下文:

○ → gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin17]
  #...etc  
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-17
4

3 回答 3

4

@RangerRanger 的答案对我不起作用,但我像他一样检查了bundler 文档并找到了为我工作的人:

force_ruby_platform (BUNDLE_FORCE_RUBY_PLATFORM):忽略当前机器的平台,只安装 ruby​​ 平台 gem。因此,具有本机扩展的 gem 将从源代码编译。

这是命令:bundle config force_ruby_platform true

于 2020-12-14T10:36:45.370 回答
3

这是由全局捆绑程序配置引起的。设置为 false 会停止该行为。

specific_platform (BUNDLE_SPECIFIC_PLATFORM):允许捆绑器解析特定的运行平台并将其存储在锁定文件中,而不是仅使用通用平台。特定平台是 Gem::Platform.local 报告的确切平台三元组,例如 x86_64-darwin-16 或 Universal-java-1.8。另一方面,通用平台是诸如 ruby​​、mswin 或 java 之类的平台。在此示例中,x86_64-darwin-16 将映射到 ruby​​,universal-java-1.8 将映射到 java。

于 2018-06-08T22:05:28.017 回答
0

如果您想安装依赖项而不更新Gemfile.lock,只需使用--frozen选项. 例如bundle --frozen。这将正常安装依赖项,除了不更新Gemfile.lock

编辑

如果这不是一个好的解决方案,那么最好的选择可能是将其添加Gemfile.lock.gitignore您的本地存储库中。您可以your_repo/.git/info/exclude根据此答案创建一个

于 2018-06-08T19:13:02.117 回答