【问题标题】:'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError) when running `rails server`'require':无法加载此类文件 - 运行“rails server”时出现“nokogiri\nokogiri”(LoadError)
【发布时间】:2015-05-14 00:38:48
【问题描述】:

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

【问题讨论】:

  • 你跑过gem install nokogiri 吗?这至少会告诉你为什么它没有安装为 Rails 的依赖项。
  • 在 rails 目录上运行 bundle install
  • 是Ruby2.2的问题

标签: ruby-on-rails ruby nokogiri


【解决方案1】:

修复

  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

步骤

捆绑安装

第一步是捆绑

这会将nokogiri gem 放在您的机器上,而不需要运行预打包的编译器(这在 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 文件夹on Mega(密钥:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA):

添加到 PATH

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

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

  • MINGW64_PATH/bin
  • MSYS64_PATH/bin

下载库

我已将库添加到 Mega:

您将在此处解压缩它们:

所有的库都来自this source

运行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 时构建的:


Extensions

缺少扩展会阻止 Nokogiri 运行。

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

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

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

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

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

【讨论】:

  • 我尝试使用您提供的密钥登录,但它说 url 不再是 :( 有机会从您那里获得必要的组件吗?
  • 好的,让我修复一下回购
  • 刚刚对库进行了排序,我认为 Mega 删除了它们
  • 无论如何,gem 应该可以与更高版本的 ruby​​ 一起使用。我只是想让它在 Windows 上正常工作(没有黑客)感兴趣,因此我的帖子。如果您使用的是 Ruby 的更高版本,您应该可以毫无问题地安装 Nokogiri
【解决方案2】:
  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 再次启动服务器,它应该可以工作。

【讨论】:

  • 漂亮,有效!尽管如此,Nokogiri 在 Windows 上不支持 2.2.x 或更高版本仍然很愚蠢......
【解决方案3】:

我让 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

【讨论】:

    【解决方案4】:

    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

    【讨论】:

    • 感谢您提供的信息,这清除了它。现在我只是转移到 linux 上在 Rails 上工作。
    猜你喜欢
    • 1970-01-01
    • 2021-07-08
    • 2012-05-15
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多