繁体   English   中英

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

[英]'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)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 server 再次启动ruby bin\\rails server ,它应该可以工作。

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

  1. Nokogiri 的 github repo 中查找最新版本的 Nokogiri。
  2. 运行gem uninstall nokogiri
  3. gem "nokogiri", ">= 1.6.7.rc"到您的 Gemfile 中。
  4. 运行bundle install
  5. 如果 bundle 在某个版本中锁定了 Nokogiri,则运行bundle update 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 (删除Devkit路径引用 - 它不起作用)
  7. 下载libxml2libxslticonv(或此处
  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') dir_config('iconv').any? or pkg_config('libiconv')#376

在此处输入图片说明

标准的 Nokogiri 安装“依赖于”包含iconvlibxml2 - 我们需要明确定义它,否则将会出现iconv.h is missing错误。

添加工具链

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

你需要MinGW

在此处输入图片说明

我已经在 Mega 上压缩了我的确切MinGW64MSYS64文件夹(密钥: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA ):

在此处输入图片说明

添加到路径

这可以访问gccmake (两者都需要):

在此处输入图片说明

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

  • MINGW64_PATH/bin
  • MSYS64_PATH/bin

下载库

我已将库添加到 Mega:

在此处输入图片说明

您将在此处解压缩它们:

在此处输入图片说明

所有的库都来自这个来源

运行extconf.rb

一旦库在您的系统上,您可以运行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 运行。

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

在此处输入图片说明

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错误)。

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

上面的文档应该向您展示如何做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM