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

时间:2015-03-12 00:24:41

标签: ruby-on-rails ruby nokogiri

我正在使用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应用程序工作?

4 个答案:

答案 0 :(得分:63)

Nokogiri还没有在Windows上支持Ruby 2.2。下一个版本会。见https://github.com/sparklemotion/nokogiri/issues/1256

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

您可能希望加入或观看有关devkit构建支持主题的讨论:https://github.com/sparklemotion/nokogiri/issues/1190

答案 1 :(得分:38)

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

    gem uninstall nokogiri
    
  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
    

    或者如果您正在运行32位Ruby:

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

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

  4. 尝试使用ruby bin\rails server再次启动服务器,它应该可以正常工作。

答案 2 :(得分:33)

我让Nokogiri在Windows 10上运行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. 如果捆绑已锁定Nokogiri某个版本,请运行bundle update nokogiri

答案 3 :(得分:6)

enter image description here

修复

  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. Download MinGW64 & MSYS folders from Mega
  6. 将它们添加到Windows中的PATH(删除Devkit路径引用 - 它不起作用)
  7. Download libxml2,libxslt, iconv libraries(或here
  8. 运行ruby extconf.rb --platform=ruby --n --use-system-libraries引用下载的库
  9. 运行make
  10. 运行make install
  11. 的步骤

    捆绑安装

    第一步是捆绑

    这会将nokogiri gem放在你的机器上而不运行预打包的编译器(这在主要是在Windows中不起作用)。

    这将显示Nokogiri 已安装

    enter image description here

    浏览

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

    enter image description here

    打开extconf.rb

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

    enter image description here

    标准Nokogiri安装“依赖”libxml2包含iconv - 我们需要明确定义它,否则会发生iconv.h is missing错误。

    添加工具链

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

    您需要MinGW

    enter image description here

    我已经压缩了我的MinGW64MSYS64个文件夹on Mega(密钥:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

    enter image description here

    添加到路径

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

    enter image description here

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

      
        
    • MINGW64_PATH / bin中
    •   
    • MSYS64_PATH / bin中
    •   

    下载Libs

    我已将libs添加到Mega:

    enter image description here

    你会在这里解压缩它们:

    enter image description here

    所有的lib都来自this source

    运行extconf.rb

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

    enter image description here

      

    <强> 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

    enter image description here

    这可能会产生错误/警告,只要它显示“Error 1 (ignored)”,就应该没问题。

    然后,使用make install

    enter image description here

    然后浏览到您的Rails安装并运行rails s

    enter image description here

    解释

    提供背景信息:

    Windows上的Ruby 2.2+无法编译Nokogiri所需的扩展

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

    它们是在安装 gem时构建的:

    enter image description here

    <强> Extensions

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

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

    enter image description here

    Mysql2RMagickPGSQLNokogiri所有使用扩展程序/库。

    这就是为什么 - 在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错误)。

    这意味着您必须确保系统中有文件,并运行编译器进行安装。

    上述文档应该告诉你如何做到这一点。