Apple M1执行rake db:create报nokogiri x86_64与arm64e架构不兼容错误
问题原因
报错本质是已安装的Nokogiri 1.13.6原生扩展为x86_64(Intel芯片)架构,和M1设备的arm64架构不兼容。之前设置的force_ruby_platform true配置会强制Bundler拉取通用Ruby平台的预编译gem包,默认拉取的是Intel架构版本,不会触发本地原生编译,反而会加剧架构不匹配问题。
解决步骤
- 第一步:清理错误配置与不兼容gem包
执行以下命令移除错误配置、卸载架构不匹配的Nokogiri:
卸载过程如果提示多版本匹配,选择删除所有对应1.13.6版本的文件即可。bundle config unset force_ruby_platform gem uninstall nokogiri -v 1.13.6 - 第二步:确认运行环境为arm64原生
先确认当前终端没有开启Rosetta转译:打开终端的「显示简介」,确保「使用Rosetta打开」选项处于未勾选状态。
再验证rbenv安装的Ruby 2.7.1为arm64原生版本,执行:
如果输出内容包含file ~/.rbenv/versions/2.7.1/bin/rubyx86_64,说明当前Ruby是转译版本,需要在原生arm终端下重新执行rbenv install 2.7.1安装原生版本。 - 第三步:安装编译依赖
执行Homebrew命令安装Nokogiri编译需要的系统依赖:brew install libxml2 libxslt pkg-config - 第四步:重新安装适配arm64架构的Nokogiri
配置Nokogiri使用系统库本地编译,再重新安装项目依赖:bundle config set build.nokogiri --use-system-libraries bundle install - 第五步:验证修复结果
安装完成后先验证Nokogiri扩展架构是否正确,执行:
输出内容包含file ~/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/nokogiri-1.13.6/lib/nokogiri/nokogiri.bundlearm64即为架构匹配,此时重新执行rake db:create即可正常运行。
注意:如果后续安装其他gem也出现同类架构不匹配报错,只需要卸载对应gem后重新执行
bundle install触发本地原生编译即可解决。
内容的提问来源于stack exchange,提问作者Ana María González
相关产品推荐
相关产品推荐

