'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
-
首先,卸载你现在使用的Nokogiri版本:
gem uninstall nokogiri
-
下载Nokogiri 1.6.6.2(x64)或Nokogiri 1.6.6.2(x86)
-
在本地安装此版本使用:
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答案:
- 在Nokogiri的github回购中查找最新版本的Nokogiri。
- 运行
gem uninstall nokogiri
。 - 将
gem "nokogiri", ">= 1.6.7.rc"
到您的Gemfile中。 - 运行
bundle install
。 - 运行
bundle update nokogiri
如果捆绑在某些版本上locking了Nokogiri。
固定
- 捆绑安装(获取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
- 从Mega下载
MinGW64
&MSYS
文件夹 - 将它们添加到Windows中的
PATH
(删除Devkit
path引用 – 它不起作用) - 下载
libxml2
,libxslt
,iconv
库 (或这里 ) - 运行
ruby extconf.rb --platform=ruby --n --use-system-libraries
引用下载的库 - 运行
make
- 运行
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安装“依赖” iconv
的libxml2
包含 – 我们需要明确定义它,否则iconv.h is missing
错误将发生。
添加工具链
不要使用devkit
– 这是行不通的。
你需要MinGW
:
我在Mega上压缩了精确的MinGW64
和MSYS64
文件夹(键: !FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到PATH
这使得访问gcc
& make
(都是必需的):
从您的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
文件夹中( 你可以在这里阅读它们 ):
Mysql2
, RMagick
, PGSQL
, Nokogiri
等都使用扩展/库。
这就是为什么 – 在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
错误)。
这意味着你必须确保你的系统上有这些文件,然后运行编译器来安装它们。
上面的文档应该告诉你如何做到这一点。