代码之家  ›  专栏  ›  技术社区  ›  Shef

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

  •  68
  • Shef  · 技术社区  · 11 年前

    我正在用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 回复  |  直到 10 年前
        1
  •  64
  •   the Tin Man    10 年前

    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

        2
  •  39
  •   fabfab Thant Shwe Aung    10 年前
    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
      

      路径可能因下载文件的位置而异。

    尝试使用重新启动服务器 ruby bin\rails server ,它应该会起作用。

        3
  •  36
  •   the Tin Man    10 年前

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

    1. 在中查找Nokogiri的最新版本 Nokogiri's github repo .
    2. gem uninstall nokogiri .
    3. 添加 gem "nokogiri", ">= 1.6.7.rc" 到您的Gemfile。
    4. bundle install .
    5. bundle update nokogiri 如果捆绑包在某个版本锁定了Nokogiri。
        4
  •  6
  •   Richard Peck    9 年前

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

    步骤

    捆绑包安装

    第一步是 .

    这将使 nokogiri gem,而不运行预打包的编译器(这在Windows中基本不起作用)。

    这将显示Nokogiri为 安装 :

    enter image description here

    浏览

    浏览到 诺科吉里 文件夹,要查找 ext/nokogiri/extconf.rb :

    enter image description here

    打开 外部配置.rb

    …并添加 直接配置('conv')。有吗?或pkg_config('libiconv') #376

    enter image description here

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

    添加工具链

    不要使用 devkit 对于这个-它不起作用。

    你需要 MinGW :

    enter image description here

    我已经把衣服拉链拉上了 最小GW64 MSYS64 文件夹 on Mega (按键: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA ):

    enter image description here

    添加到PATH

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

    enter image description here

    删除 开发工具包 从路径中引用,并添加以下内容:

    • MINGW64_PATH/bin
    • MSYS64_PATH/bin

    下载库

    我已将libs添加到Mega:

    enter image description here

    您将在此处解压缩它们:

    enter image description here

    所有的libs都来自 this source .

    外部配置.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

    制作

    enter image description here

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

    然后,使用 制造安装 :

    enter image description here

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

    enter image description here


    解释

    给出上下文:

    Windows上的Ruby 2.2+无法编译 扩展 Nokogiri要求。

    这个 扩展 gem使用的额外依赖项(库)。

    当你 安装 宝石:

    enter image description here


    Extensions

    由于缺少扩展,Nokogiri无法运行。

    扩展名存在于 ext 宝石文件夹( you can read about them here ):

    enter image description here

    Mysql2 , RMagick , PGSQL , Nokogiri 全部的 使用扩展/库。

    这就是为什么在Windows上必须使用自定义开关的原因( --with-opt-dir )安装gem时。这给了Ruby/外壳/( cmd )所需的 lib / include 构建gem文件所需的目录(相当于 PATH 作品)。

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

    因为Windows没有标准的库集,所以必须自己下载。你也必须 建筑 他们自己(这很棘手)。

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


    建筑

    与Ruby2.2+的区别在于gem将“安装”而不显示任何异常。你以为它已经安装了,结果发现Rails确实安装了 负载(因此 nokogiri/nokogiri.so 错误)。

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

    以上文档将向您展示如何做到这一点。

    推荐文章