Mac x86迁移至M1 ARM架构启动Rails报nokogiri架构不兼容如何修复
M1芯片Mac运行Rails项目nokogiri架构不兼容修复方案
问题核心
原有x86架构Mac上安装的Ruby环境、gem原生扩展均为x86_64架构编译,迁移到ARM架构M1芯片Mac后,二进制文件无法被arm64e架构的系统加载,触发nokogiri加载报错:
mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')
修复步骤
- 首先确认终端运行在原生arm64模式:执行
arch命令,返回结果为arm64即为正常。如果返回x86_64,需要关闭终端APP的「使用Rosetta打开」设置,重启终端后再操作。 - 重新编译安装适配arm64架构的Ruby版本(原有rbenv管理的3.1.2是x86架构编译的,必须重装):
安装完成后进入项目目录,执行rbenv uninstall 3.1.2 RUBY_CFLAGS="-w" rbenv install 3.1.2rbenv local 3.1.2指定项目使用的Ruby版本,执行ruby -v确认输出包含arm64-darwin字段即为安装正确。 - 清理所有旧架构的gem缓存与依赖文件:
rm -rf vendor/bundle tmp/cache/bootsnap* gem cleanup gem uninstall nokogiri bootsnap -aIx - 配置bundle强制使用当前原生平台编译安装gem,避免拉取x86架构的预编译包:
bundle config set --local force_ruby_platform true bundle install - 依赖安装完成后,直接执行
rails s即可正常启动服务。
补充说明
如果后续还有其他带原生扩展的gem(比如pg、sqlite3、ffi、rmagick等)报同类架构不兼容错误,直接执行gem uninstall <报错的gem名> -aIx后重新执行bundle install,在arm64环境下重新编译对应扩展即可解决。
内容的提问来源于stack exchange,提问作者Mark Postura
相关产品推荐
相关产品推荐

