You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Gemfile.lock中出现特定平台的Gems?

问题原因

这是因为新版本的Bundler(2.3.26)和Rubygems(3.4.10)调整了默认行为:

  • 它们会优先选用适配你本地arm64 macOS环境的预编译gem包,而非通用的跨平台版本。sqlite3 1.7.0开始推出了针对arm64-darwin的专属二进制包,所以Gemfile.lock里就记录了这个平台专属版本,替代了之前的通用版sqlite3 (1.6.9)。
  • 同时,Bundler现在会把当前运行的具体操作系统平台(arm64-darwin-22/arm64-darwin-23)写入lock文件,代替之前通用的ruby标识,这就导致lock文件和你的本地平台绑定,失去了跨平台通用性。
保持Gemfile.lock平台无关性的方法

给你几个实用方案:

  • 强制生成跨平台lock文件
    更新或安装依赖时,通过参数指定只锁定通用ruby平台的版本:

    # 更新依赖并生成跨平台lock文件
    bundle update --no-install --platform ruby
    # 首次安装依赖生成lock文件时用
    bundle install --no-install --platform ruby
    

    加--no-install是为了避免在本地安装平台专属gem,只更新lock文件内容。

  • 设置全局默认配置
    一次配置让Bundler默认只处理跨平台版本,不用每次加参数:

    bundle config set --global platform ruby
    

    之后再执行bundle install或bundle update,都会自动生成平台无关的lock文件。

  • 手动修正现有lock文件
    要是不想重新生成,直接编辑Gemfile.lock也可以:

    1. 将sqlite3的版本行改回sqlite3 (1.7.0),去掉-arm64-darwin后缀
    2. 删除平台部分的arm64-darwin-22和arm64-darwin-23,换回ruby
      改完后执行bundle check验证,确保依赖没有冲突。

内容的提问来源于stack exchange,提问作者Jesper Røn-Jensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:12:40