'require': 无法加载此类文件 -- 'nokogiri\nokogiri' (LoadError) when 运行 `rails server`

'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError) when running `rails server`

我正在 运行使用 DevKit 在 Windows 8.1 上全新安装 Ruby 2.2.1。安装后我运行:

gem install rails
rails new testapp
cd testapp
rails server

保留其他所有默认值。

进程在最后一行失败,而不是 运行 连接服务器,我收到错误消息

in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)

每次都会发生这种情况,我环顾四周并尝试了我发现的所有方法来修复它,但到目前为止没有任何效果。

这里有什么问题,我如何让一个简单的测试 Rails 应用正常工作?

Nokogiri 尚不支持 Windows 上的 Ruby 2.2。下一个版本会。参见 https://github.com/sparklemotion/nokogiri/issues/1256

Nokogiri 在 Windows 上不支持本机构建(例如使用 devkit)。相反,它提供包含预构建 DLL 的 gem。

这里有一个关于 devkit 构建支持主题的讨论,您可能想加入或观看:https://github.com/sparklemotion/nokogiri/issues/1190

  1. 首先,卸载您当前使用的 Nokogiri 版本:

    gem uninstall nokogiri
    
  2. 下载Nokogiri 1.6.6.2 (x64) or Nokogiri 1.6.6.2 (x86)

  3. 本地安装此版本使用:

    gem install --local C:\Users$user$\Downloads\nokogiri-1.6.6.2-x64-mingw32.gem
    

    或者如果您是 运行 32 位 Ruby:

    gem install --local C:\Users$user$\Downloads\nokogiri-1.6.6.2-x86-mingw32.gem
    

    路径可能会有所不同,具体取决于您将文件下载到的位置。

尝试使用 ruby bin\rails server 再次启动服务器,应该可以。

我在 Windows 10 上得到了 Nokogiri 运行 Ruby 2.2,混合了 Mike Dalessios 和 Julios 的答案:

  1. Nokogiri's github repo 中寻找最新版本的 Nokogiri。
  2. 运行 gem uninstall nokogiri.
  3. gem "nokogiri", ">= 1.6.7.rc" 添加到您的 Gemfile。
  4. 运行bundle install.
  5. 运行 bundle update nokogiri 如果捆绑包已将 Nokogiri 锁定在某个版本。

修复

  1. 捆绑安装(获取 Nokogiri 文件)
  2. 浏览至 ruby_dir\lib\ruby\gems.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
  3. 打开extconf.rb
  4. dir_config('iconv').any? or pkg_config('libiconv') 添加到 #376
  5. Download MinGW64 & MSYS folders from Mega
  6. 将它们添加到 Windows 中的 PATH(删除 Devkit 路径引用 - 它不起作用)
  7. Download libxml2,libxslt, iconv libraries (or here)
  8. 运行 ruby extconf.rb --platform=ruby --n --use-system-libraries 引用下载的库
  9. 运行make
  10. 运行 make install

步骤

捆绑安装

第一步是捆绑

这将在您的机器上安装 nokogiri gem 而无需 运行 预打包的编译器(这在 Windows 中几乎不起作用)。

这会将 Nokogiri 显示为 已安装:

浏览

浏览到 nokogiri 文件夹,找到 ext/nokogiri/extconf.rb:

打开extconf.rb

... 并将 dir_config('iconv').any? or pkg_config('libiconv') 添加到 #376

标准 Nokogiri 在 iconvlibxml2 包含上安装 "rely" - 我们需要明确定义它,否则会出现 iconv.h is missing 错误。

添加工具链

不要为此使用 devkit - 它不起作用。

你需要MinGW:

我已经压缩了确切的 MinGW64MSYS64 文件夹 on Mega(键:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

添加到路径

这可以访问 gccmake(两者都是必需的):

从您的路径中删除 devkit 引用,并添加以下内容:

  • MINGW64_PATH/bin
  • MSYS64_PATH/bin

下载库

我已将库添加到 Mega:

您将在此处解压缩它们:

所有库均来自this source.

运行 extconf.rb

一旦库在您的系统上,您可以运行 ruby extconf.rb 来配置构建:

32bit

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

64bit

#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:


说明

提供上下文:

Ruby Windows 上的 2.2+ 不编译 Nokogiri 需要的 extensions

gem 的 扩展 是它使用的额外依赖项(库)。

它们是在您 安装 gem:

时构建的


Extensions

缺少扩展程序阻止了 Nokogiri 运行ning。

扩展存在于 gem (you can read about them here) 的 ext 文件夹中:

Mysql2RMagickPGSQLNokogiri全部使用extensions/libraries。

这就是为什么 - 在 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 将 "install" 不显示任何异常。您认为它已安装,却发现 Rails 加载(因此出现 nokogiri/nokogiri.so 错误)。

这意味着你必须确保你的系统上有这些文件,运行 编译器来安装它们。

上面的文档应该告诉你如何去做。