'require':无法加载这样的文件 – 运行`rails server`时'nokogiri \ nokogiri'(LoadError)

我正在使用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) 

它每次都会发生,我环顾四周,试图find解决问题的一切,但目前为止还没有发挥作用。

这里有什么问题,我如何得到一个简单的testingRails应用程序工作?

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

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

有一个讨论,您可能想要join或观看devkit构build支持这个主题: https : //github.com/sparklemotion/nokogiri/issues/1190

  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 

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

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

我在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如果捆绑在某些版本上locking了Nokogiri。

在这里输入图像描述

固定

  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') dir_config('iconv').any? or pkg_config('libiconv')#376
  5. 从Mega下载MinGW64MSYS文件夹
  6. 将它们添加到Windows中的PATH (删除Devkitpath引用 – 它不起作用)
  7. 下载libxml2libxslticonv库 (或这里 )
  8. 运行ruby extconf.rb --platform=ruby --n --use-system-libraries引用下载的库
  9. 运行make
  10. 运行make install

脚步

捆绑安装

第一步是捆绑

这将把nokogiri gem放到你的机器上,而不需要运行预编译的编译器(它们大多在Windows下不工作)。

这将显示Nokogiri已安装

在这里输入图像描述

浏览

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

在这里输入图像描述

打开extconf.rb

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

在这里输入图像描述

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

添加工具链

不要使用devkit – 这是行不通的。

你需要MinGW

在这里输入图像描述

我在Mega上压缩了精确的MinGW64MSYS64文件夹(键: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA ):

在这里输入图像描述

添加到PATH

这使得访问gccmake (都是必需的):

在这里输入图像描述

从您的path中删除devkit ref,并添加以下内容:

  • MINGW64_PATH /箱
  • MSYS64_PATH /箱

下载Libs

我已经将这些库添加到Mega中:

在这里输入图像描述

你将在这里解压缩它们:

在这里输入图像描述

所有的库都来自这个来源 。

运行extconf.rb

一旦libs在您的系统上,您可以运行ruby extconf.rb来configuration构build:

在这里输入图像描述

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时构build的:

在这里输入图像描述


扩展

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

扩展名存在于一个gem的ext文件夹中( 你可以在这里阅读它们 ):

在这里输入图像描述

Mysql2RMagickPGSQLNokogiri 等都使用扩展/库。

这就是为什么 – 在Windows上 – 安装gem时必须使用自定义开关( --with-opt-dir )。 这使Ruby / shell /( cmd )成为构buildgem文件所需的lib / include目录(这相当于PATH工作原理)。

Linux / Mac ,这些目录由相应的包pipe理器( brew / apt-get )pipe理。 Windows没有这个,所以你必须手动安装扩展。

由于Windows没有一套标准的库,你必须自己下载它们。 你也必须自己构build它们(这很棘手)。

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


build立

与Ruby 2.2+的区别在于,gem将“安装”而不显示任何exception。 你认为它已经安装,只有findRails不加载(因此nokogiri/nokogiri.so错误)。

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

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