更新Nokogiri gem时遇原生扩展构建错误,求解决方法
解决Nokogiri 1.8.2更新失败的问题
你在更新Nokogiri时碰到了两个问题:Bundler的平台依赖警告,以及核心的原生扩展编译失败。我来一步步帮你搞定:
一、消除Bundler平台依赖警告
你看到的关于wdm (~> 0.1.0)和tzinfo-data (>= 0)的警告,是因为这两个gem仅针对Windows或Java平台,而当前Bundler是为Ruby平台安装依赖。如果想要彻底消除这些警告,直接执行提示的命令即可:
bundle lock --add-platform x86-mswin32 x86-mingw32 java
要是你的项目不需要支持这些平台,也可以选择忽略这些警告——它们不会影响核心功能运行。
二、解决Nokogiri原生扩展编译失败问题
这是导致更新失败的关键原因,错误提示明确说了「编译器无法生成可执行文件,需要先安装开发工具」。结合你的环境(macOS + rbenv + Ruby 2.2.2),按以下步骤操作:
- 安装Xcode命令行工具
macOS下编译原生扩展必须依赖这套工具,执行命令安装:
xcode-select --install
如果已经安装过,系统会提示你无需操作。
- 安装Nokogiri依赖的系统库
Nokogiri需要libxml2和libxslt这两个基础库,用Homebrew安装:
brew install libxml2 libxslt
- 手动指定库路径安装Nokogiri
为了确保gem能正确找到依赖库,单独安装指定版本的Nokogiri:
gem install nokogiri -v '1.8.2' -- --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2 --with-xslt-include=$(brew --prefix libxslt)/include
- 重新执行bundle安装
等Nokogiri单独安装成功后,回到项目目录运行:
bundle install
补充:查看详细编译日志
如果还是失败,可以查看mkmf.log文件获取更具体的错误信息:
cat /usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/extensions/x86_64-darwin-13/2.2.0-static/nokogiri-1.8.2/mkmf.log
根据日志里的缺失项,再针对性解决问题。
内容的提问来源于stack exchange,提问作者Mathieu THOMASSET
相关产品推荐
相关产品推荐

