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

She*_*hef 59 ruby ruby-on-rails nokogiri

我正在使用DevKit在Windows 8.1上运行Ruby 2.2.1的干净安装.安装后我运行:

gem install rails
rails new testapp
cd testapp
rails server
Run Code Online (Sandbox Code Playgroud)

保留其他所有内容.

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

in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)
Run Code Online (Sandbox Code Playgroud)

它每次都会发生,我环顾四周,尝试了我发现的所有东西,但到目前为止还没有任何效果.

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

小智 63

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


Jul*_*xir 38

  1. 首先,卸载您目前拥有的Nokogiri版本:

    gem uninstall nokogiri
    
    Run Code Online (Sandbox Code Playgroud)
  2. 下载Nokogiri 1.6.6.2(x64)Nokogiri 1.6.6.2(x86)

  3. 使用以下方式在本地安

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x64-mingw32.gem
    
    Run Code Online (Sandbox Code Playgroud)

    或者如果你运行32位Ruby:

    gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x86-mingw32.gem
    
    Run Code Online (Sandbox Code Playgroud)

    根据您下载文件的位置,路径可能会有所不同.

尝试再次使用启动服务器ruby bin\rails server,它应该工作.


Pas*_*cal 33

我在Windows 10上运行了带有Ruby 2.2的Nokogiri,混合了Mike Dalessios和Julios的回答:

  1. Nokogiri的github回购中寻找最新版本的Nokogiri .
  2. gem uninstall nokogiri.
  3. 添加gem "nokogiri", ">= 1.6.7.rc"到您的Gemfile.
  4. bundle install.
  5. bundle update nokogiri如果bundle已经锁定了某个版本的Nokogiri,请运行.


Ric*_*eck 6

在此输入图像描述

固定

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

脚步

捆绑安装

第一步是捆绑.

这将把nokogirigem放在你的机器上而不运行预先打包的编译器(这在大多数情况下不适用于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:

在此输入图像描述

我有我的拉链准确MinGW64MSYS64文件夹上兆(键:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

在此输入图像描述

添加到路径

这样可以访问gcc&make(两者都需要):

在此输入图像描述

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

  • MINGW64_PATH /箱
  • MSYS64_PATH /箱

下载Libs

我已将libs添加到Mega:

在此输入图像描述

你将在这里解压缩它们:

在此输入图像描述

所有的lib都来自这个来源.

extconf.rb

一旦libs在您的系统上,您就可以运行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 时构建的:

在此输入图像描述


扩展

缺乏扩展阻止了Nokogiri的运行.

扩展名存在于extgem 的文件夹中(您可以在这里阅读它们):

在此输入图像描述

Mysql2,RMagick,PGSQL,Nokogiri所有使用扩展/库.

这就是为什么 - 在Windows上 - 你必须--with-opt-dir在安装gem时使用自定义开关().这为Ruby/shell /(cmd)提供了构建gem文件所需的必需lib/ include目录(它相当于PATH工作方式).

Linux/上Mac,这些目录由相应的包管理器(brew/ apt-get)管理.Windows没有此功能,因此您必须手动安装扩展.

由于Windows没有标准的库集,因此您必须自己下载它们.你还必须自己构建它们(这很棘手).

Nokogiri安装的修复是使用正确的库和构建工具来安装gem.


建立

与Ruby 2.2+的区别在于gem将"安装"而不显示任何异常.你认为它已经安装,只是发现Rails 没有加载(因此nokogiri/nokogiri.so错误).

这意味着您必须确保系统上有文件,并运行编译器来安装它们.

上面的文档应该告诉你如何做到这一点.