You need to enable JavaScript to run this app. 如何修复Ruby on Rails下Nokogiri的架构不兼容加载错误
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Ruby on Rails下Nokogiri的架构不兼容加载错误

核心问题定位

报错本质是架构不匹配:你当前RVM安装的Ruby 2.6.3是x86_64(Intel)架构编译的,但bundler自动拉取了arm64(Apple Silicon)架构的Nokogiri预编译动态库,跨架构加载就会直接触发LoadError。
Traceback里出现的bootsnap、spring只是因为本地缓存了之前错误的加载链路,属于连带报错,不是这两个组件本身的配置问题。

可直接落地的修复步骤

1. 先确认本地Ruby的实际运行架构

在项目根目录终端执行:
ruby -e 'puts RbConfig::CONFIG["arch"]'
如果输出是x86_64-darwin20,就完全对应报错的场景——Intel架构的Ruby硬要加载arm64编译的Nokogiri包。

2. 清空所有关联的旧缓存和残留安装

这步是很多人修复失败的核心原因,不做的话旧配置会一直覆盖新的安装结果:

  • 停止所有后台常驻的spring进程:spring stop
  • 删掉项目里bootsnap生成的全量缓存:rm -rf tmp/cache/bootsnap*
  • 强制卸载本地所有已安装的Nokogiri版本,避免残留架构不匹配的包:
    gem uninstall nokogiri --force --executable
    执行后如果弹出多版本选择提示,全选删除即可,直到本地没有任何Nokogiri残留。

3. 强制安装和Ruby架构匹配的Nokogiri

不要用默认的自动预编译包匹配,直接指定安装x86_64架构的版本:
gem install nokogiri -v '1.11.1' --platform=x86_64-darwin -- --use-system-libraries

如果1.11.1版本没有对应的x86_64预编译包,就直接放宽Gemfile里的Nokogiri版本限制,改成gem 'nokogiri', '~> 1.13',只要是适配x86_64 darwin20的稳定版本,都能兼容Ruby 2.6.3的运行环境。

4. 重置项目依赖锁文件

旧的Gemfile.lock里还存着arm64版本Nokogiri的条目,必须清掉再重新生成:

  • 从锁文件里移除Nokogiri的旧条目:bundle lock --remove nokogiri
  • 重新拉取匹配当前架构的依赖:bundle install
  • 验证Nokogiri是否能正常加载:
    bundle exec ruby -e 'require "nokogiri"; puts "Nokogiri 加载正常,版本: #{Nokogiri::VERSION}"'
    这步如果没有报错输出,就说明架构匹配的问题已经解决。

5. 最终启动验证

依次执行下面的命令,确认全流程没有报错:

  • 启动控制台:bin/rails c
  • 启动开发服务:bin/rails s
踩坑提醒
  • 不要在Rosetta模拟终端和原生Apple Silicon终端之间反复切换跑项目,很容易导致RVM的Ruby编译架构混乱,最好固定用同一种终端环境开发。
  • 不要随便升级Ruby 2.6.3的小版本,Big Sur 11.1下RVM安装的2.6.3默认就是x86_64架构,只要匹配对Nokogiri的架构就能稳定运行。
  • 如果反复清缓存还是报错,可以临时把Gemfile里的bootsnap、spring注释掉,重新bundle install后验证基础加载是否正常,确认没问题再加回这两个依赖,排除旧缓存的干扰。

内容的提问来源于stack exchange,提问作者Alice Sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 18:06:02