'require': 无法加载此类文件 -- 'nokogiri\nokogiri' (LoadError) when 运行 `rails server`
'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
首先,卸载您当前使用的 Nokogiri 版本:
gem uninstall nokogiri
本地安装此版本使用:
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
再次启动服务器,应该可以。
我在 Windows 10 上得到了 Nokogiri 运行 Ruby 2.2,混合了 Mike Dalessios 和 Julios 的答案:
- 在 Nokogiri's github repo 中寻找最新版本的 Nokogiri。
- 运行
gem uninstall nokogiri
.
- 将
gem "nokogiri", ">= 1.6.7.rc"
添加到您的 Gemfile。
- 运行
bundle install
.
- 运行
bundle update nokogiri
如果捆绑包已将 Nokogiri 锁定在某个版本。
修复
- 捆绑安装(获取 Nokogiri 文件)
- 浏览至
ruby_dir\lib\ruby\gems.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
- 打开
extconf.rb
- 将
dir_config('iconv').any? or pkg_config('libiconv')
添加到 #376
- Download
MinGW64
& MSYS
folders from Mega
- 将它们添加到 Windows 中的
PATH
(删除 Devkit
路径引用 - 它不起作用)
- Download
libxml2
,libxslt
, iconv
libraries (or here)
- 运行
ruby extconf.rb --platform=ruby --n --use-system-libraries
引用下载的库
- 运行
make
- 运行
make install
步骤
捆绑安装
第一步是捆绑。
这将在您的机器上安装 nokogiri
gem 而无需 运行 预打包的编译器(这在 Windows 中几乎不起作用)。
这会将 Nokogiri 显示为 已安装:
浏览
浏览到 nokogiri
文件夹,找到 ext/nokogiri/extconf.rb
:
打开extconf.rb
... 并将 dir_config('iconv').any? or pkg_config('libiconv')
添加到 #376
标准 Nokogiri 在 iconv
的 libxml2
包含上安装 "rely" - 我们需要明确定义它,否则会出现 iconv.h is missing
错误。
添加工具链
不要为此使用 devkit
- 它不起作用。
你需要MinGW
:
我已经压缩了确切的 MinGW64
和 MSYS64
文件夹 on Mega(键:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路径
这可以访问 gcc
和 make
(两者都是必需的):
从您的路径中删除 devkit
引用,并添加以下内容:
- MINGW64_PATH/bin
- MSYS64_PATH/bin
下载库
我已将库添加到 Mega:
您将在此处解压缩它们:
所有库均来自this source.
运行 extconf.rb
一旦库在您的系统上,您可以运行 ruby extconf.rb
来配置构建:
32bit
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
64bit
#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
:
说明
提供上下文:
Ruby Windows 上的 2.2+ 不编译 Nokogiri 需要的 extensions。
gem 的 扩展 是它使用的额外依赖项(库)。
它们是在您 安装 gem:
时构建的
缺少扩展程序阻止了 Nokogiri 运行ning。
扩展存在于 gem (you can read about them here) 的 ext
文件夹中:
Mysql2
、RMagick
、PGSQL
、Nokogiri
等全部使用extensions/libraries。
这就是为什么 - 在 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 将 "install" 不显示任何异常。您认为它已安装,却发现 Rails 未 加载(因此出现 nokogiri/nokogiri.so
错误)。
这意味着你必须确保你的系统上有这些文件,运行 编译器来安装它们。
上面的文档应该告诉你如何去做。
我正在 运行使用 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
首先,卸载您当前使用的 Nokogiri 版本:
gem uninstall nokogiri
本地安装此版本使用:
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
再次启动服务器,应该可以。
我在 Windows 10 上得到了 Nokogiri 运行 Ruby 2.2,混合了 Mike Dalessios 和 Julios 的答案:
- 在 Nokogiri's github repo 中寻找最新版本的 Nokogiri。
- 运行
gem uninstall nokogiri
. - 将
gem "nokogiri", ">= 1.6.7.rc"
添加到您的 Gemfile。 - 运行
bundle install
. - 运行
bundle update nokogiri
如果捆绑包已将 Nokogiri 锁定在某个版本。
修复
- 捆绑安装(获取 Nokogiri 文件)
- 浏览至
ruby_dir\lib\ruby\gems.2.0\gems\nokogiri-1.6.6.2\ext\nokogiri
- 打开
extconf.rb
- 将
dir_config('iconv').any? or pkg_config('libiconv')
添加到#376
- Download
MinGW64
&MSYS
folders from Mega - 将它们添加到 Windows 中的
PATH
(删除Devkit
路径引用 - 它不起作用) - Download
libxml2
,libxslt
,iconv
libraries (or here) - 运行
ruby extconf.rb --platform=ruby --n --use-system-libraries
引用下载的库 - 运行
make
- 运行
make install
步骤
捆绑安装
第一步是捆绑。
这将在您的机器上安装 nokogiri
gem 而无需 运行 预打包的编译器(这在 Windows 中几乎不起作用)。
这会将 Nokogiri 显示为 已安装:
浏览
浏览到 nokogiri
文件夹,找到 ext/nokogiri/extconf.rb
:
打开extconf.rb
... 并将 dir_config('iconv').any? or pkg_config('libiconv')
添加到 #376
标准 Nokogiri 在 iconv
的 libxml2
包含上安装 "rely" - 我们需要明确定义它,否则会出现 iconv.h is missing
错误。
添加工具链
不要为此使用 devkit
- 它不起作用。
你需要MinGW
:
我已经压缩了确切的 MinGW64
和 MSYS64
文件夹 on Mega(键:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路径
这可以访问 gcc
和 make
(两者都是必需的):
从您的路径中删除 devkit
引用,并添加以下内容:
- MINGW64_PATH/bin
- MSYS64_PATH/bin
下载库
我已将库添加到 Mega:
您将在此处解压缩它们:
所有库均来自this source.
运行 extconf.rb
一旦库在您的系统上,您可以运行 ruby extconf.rb
来配置构建:
32bit
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
64bit
#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
:
说明
提供上下文:
Ruby Windows 上的 2.2+ 不编译 Nokogiri 需要的 extensions。
gem 的 扩展 是它使用的额外依赖项(库)。
它们是在您 安装 gem:
时构建的缺少扩展程序阻止了 Nokogiri 运行ning。
扩展存在于 gem (you can read about them here) 的 ext
文件夹中:
Mysql2
、RMagick
、PGSQL
、Nokogiri
等全部使用extensions/libraries。
这就是为什么 - 在 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 将 "install" 不显示任何异常。您认为它已安装,却发现 Rails 未 加载(因此出现 nokogiri/nokogiri.so
错误)。
这意味着你必须确保你的系统上有这些文件,运行 编译器来安装它们。
上面的文档应该告诉你如何去做。