修复
- 捆绑安装(获取 Nokogiri 文件)
- 浏览至
ruby_dir\lib\ruby\gems\2.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
- 打开
extconf.rb
- 将
dir_config('iconv').any? or pkg_config('libiconv') 添加到#376
- Download
MinGW64 & MSYS folders from Mega
- 在 Windows 中将它们添加到
PATH(删除 Devkit 路径引用 - 它不起作用)
-
Download
libxml2,libxslt, iconv libraries(或here)
- 运行
ruby extconf.rb --platform=ruby --n --use-system-libraries 引用下载的库
- 运行
make
- 运行
make install
步骤
捆绑安装
第一步是捆绑。
这会将nokogiri gem 放在您的机器上,而不需要运行预打包的编译器(这在 Windows 中大部分情况下不起作用)。
这会将 Nokogiri 显示为 已安装:
浏览
浏览到nokogiri 文件夹,找到ext/nokogiri/extconf.rb:
打开extconf.rb
...并将dir_config('iconv').any? or pkg_config('libiconv') 添加到#376
标准 Nokogiri 安装“依赖”libxml2 包含 iconv - 我们需要明确定义它,否则会出现 iconv.h is missing 错误。
添加工具链
不要为此使用devkit - 它不起作用。
你需要MinGW:
我已经压缩了我的确切MinGW64 和MSYS64 文件夹on Mega(密钥:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):
添加到 PATH
这可以访问gcc 和make(两者都需要):
从路径中删除 devkit 引用,并添加以下内容:
- MINGW64_PATH/bin
- MSYS64_PATH/bin
下载库
我已将库添加到 Mega:
您将在此处解压缩它们:
所有的库都来自this source。
运行extconf.rb
一旦你的系统上有库,你可以运行ruby extconf.rb来配置构建:
32位
ruby extconf.rb --platform=ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxml2-2.9.2-win32-x86/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/iconv-1.14-win32-x86 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/32bit/libxslt-1.1.28-win32-x86
64位
#64
ruby extconf.rb --platform=ruby -N -- --use-system-libraries --with-xml2-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64 --with-xml2-include=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxml2-2.9.2-win32-x86_64/include/libxml2 --with-iconv-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/iconv-1.14-win32-x86_64 --with-xslt-dir=C:/Dev/Dependencies/Ruby/lib/nokogiri/64bit/libxslt-1.1.28-win32-x86_64
make
这可能会产生错误/警告,只要它说“Error 1 (ignored)”,应该没问题。
然后,使用make install:
然后浏览到您的 Rails 安装并运行 rails s:
说明
给出上下文:
Windows 上的 Ruby 2.2+ 无法编译 Nokogiri 所需的扩展。
gem 的扩展是它使用的额外依赖项(库)。
它们是在您安装 gem 时构建的:
Extensions
缺少扩展会阻止 Nokogiri 运行。
扩展存在于 gem (you can read about them here) 的 ext 文件夹中:
Mysql2,RMagick,PGSQL,Nokogiri 等所有使用扩展/库。
这就是为什么 - 在 Windows 上 - 在安装 gem 时必须使用自定义开关 (--with-opt-dir)。这为 Ruby / shell / (cmd) 提供了构建 gem 文件所需的 lib / include 目录(它相当于 PATH 的工作方式)。
在Linux/Mac 上,这些目录由各自的包管理器 (brew/apt-get) 管理。 Windows 没有这个,所以你必须手动安装扩展。
由于 Windows 没有一套标准的库,您必须自己下载它们。您还必须自己构建它们(这很棘手)。
Nokogiri 安装的修复方法是使用正确的库和构建工具来安装 gem。
构建
与 Ruby 2.2+ 的区别在于 gem 将“安装”而不显示任何异常。你以为它已经安装了,却发现 Rails 没有没有加载(因此出现nokogiri/nokogiri.so 错误)。
这意味着您必须确保系统上有文件,并运行编译器来安装它们。
以上文档应该向您展示如何做到这一点。