我正在使用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应用程序工作?
答案 0 :(得分:63)
Nokogiri还没有在Windows上支持Ruby 2.2。下一个版本会。见https://github.com/sparklemotion/nokogiri/issues/1256
Nokogiri在Windows上不支持本机构建(例如使用devkit)。相反,它提供了包含预建DLL的宝石。
您可能希望加入或观看有关devkit构建支持主题的讨论:https://github.com/sparklemotion/nokogiri/issues/1190
答案 1 :(得分:38)
首先,卸载您目前拥有的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
再次启动服务器,它应该可以正常工作。
答案 2 :(得分:33)
我让Nokogiri在Windows 10上运行Ruby 2.2,混合了Mike Dalessios和Julios的回答:
gem uninstall nokogiri
。gem "nokogiri", ">= 1.6.7.rc"
添加到您的Gemfile。bundle install
。bundle update nokogiri
。答案 3 :(得分:6)
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')
添加到#376
MinGW64
& MSYS
folders from Mega PATH
(删除Devkit
路径引用 - 它不起作用)libxml2
,libxslt
, iconv
libraries(或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安装“依赖”libxml2
包含iconv
- 我们需要明确定义它,否则会发生iconv.h is missing
错误。
添加工具链
不要使用devkit
- 它不起作用。
您需要MinGW
:
我已经压缩了我的MinGW64
和MSYS64
个文件夹on Mega(密钥:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路径
这样可以访问gcc
& make
(两者都需要):
从您的路径中删除devkit
引用,并添加以下内容:
- MINGW64_PATH / bin中
- MSYS64_PATH / bin中
下载Libs
我已将libs添加到Mega:
你会在这里解压缩它们:
所有的lib都来自this source。
运行extconf.rb
一旦您的系统上有libs,您就可以运行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的 extensions 是它使用的额外依赖项(库)。
它们是在安装 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
错误)。
这意味着您必须确保系统中有文件,并运行编译器进行安装。
上述文档应该告诉你如何做到这一点。