[英]How to fix `require': cannot load such file — nokogiri/2.1/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
首先,卸载您当前使用的 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
server 再次启动ruby bin\\rails server
,它应该可以工作。
我让 Nokogiri 在 Windows 10 上使用 Ruby 2.2 运行,混合了 Mike Dalessios 和 Julios 的回答:
gem uninstall nokogiri
。gem "nokogiri", ">= 1.6.7.rc"
到您的 Gemfile 中。bundle install
。bundle update nokogiri
。ruby_dir\\lib\\ruby\\gems\\2.2.0\\gems\\nokogiri-1.6.6.2\\ext\\nokogiri
extconf.rb
dir_config('iconv').any? or pkg_config('libiconv')
dir_config('iconv').any? or pkg_config('libiconv')
到#376
MinGW64
和MSYS
文件夹PATH
(删除Devkit
路径引用 - 它不起作用)libxml2
、 libxslt
、 iconv
库(或此处)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')
dir_config('iconv').any? or pkg_config('libiconv')
到#376
标准的 Nokogiri 安装“依赖于”包含iconv
的libxml2
- 我们需要明确定义它,否则将会出现iconv.h is missing
错误。
添加工具链
不要为此使用devkit
- 它不起作用。
你需要MinGW
:
我已经在 Mega 上压缩了我的确切MinGW64
和MSYS64
文件夹(密钥: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路径
这可以访问gcc
和make
(两者都需要):
从您的路径中删除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
文件夹中(你可以在这里阅读它们):
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
错误)。
这意味着您必须确保系统上有这些文件,并运行编译器来安装它们。
上面的文档应该向您展示如何做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.