She*_*hef 59 ruby ruby-on-rails nokogiri
我正在使用DevKit在Windows 8.1上运行Ruby 2.2.1的干净安装.安装后我运行:
gem install rails
rails new testapp
cd testapp
rails server
Run Code Online (Sandbox Code Playgroud)
保留其他所有内容.
该进程在最后一行失败,而不是运行服务器,我收到错误消息
in 'require': cannot load such file -- 'nokogiri\nokogiri' (LoadError)
Run Code Online (Sandbox Code Playgroud)
它每次都会发生,我环顾四周,尝试了我发现的所有东西,但到目前为止还没有任何效果.
这里有什么问题,如何让一个简单的测试Rails应用程序工作?
小智 63
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
Jul*_*xir 38
首先,卸载您目前拥有的Nokogiri版本:
gem uninstall nokogiri
Run Code Online (Sandbox Code Playgroud)使用以下方式在本地安
gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x64-mingw32.gem
Run Code Online (Sandbox Code Playgroud)
或者如果你运行32位Ruby:
gem install --local C:\Users\$user$\Downloads\nokogiri-1.6.6.2-x86-mingw32.gem
Run Code Online (Sandbox Code Playgroud)
根据您下载文件的位置,路径可能会有所不同.
尝试再次使用启动服务器ruby bin\rails server
,它应该工作.
Pas*_*cal 33
我在Windows 10上运行了带有Ruby 2.2的Nokogiri,混合了Mike Dalessios和Julios的回答:
gem uninstall nokogiri
.gem "nokogiri", ">= 1.6.7.rc"
到您的Gemfile.bundle install
.bundle update nokogiri
如果bundle已经锁定了某个版本的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')
到#376
MinGW64
和MSYS
文件夹PATH
Windows中(删除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')
到#376
标准Nokogiri安装"依赖" libxml2
包含iconv
- 我们需要明确定义它,否则iconv.h is missing
将发生错误.
添加工具链
不要devkit
用于此 - 它不起作用.
你需要MinGW
:
我有我的拉链准确MinGW64
和MSYS64
文件夹上兆(键:!FJtcq25l-QMsNltCxllMhc1IGqORvap8xv8gWxSUbDA
):
添加到路径
这样可以访问gcc
&make
(两者都需要):
devkit
从路径中删除引用,并添加以下内容:
- MINGW64_PATH /箱
- MSYS64_PATH /箱
下载Libs
我已将libs添加到Mega:
你将在这里解压缩它们:
所有的lib都来自这个来源.
跑 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 的扩展是它使用的额外依赖(库).
它们是在安装 gem 时构建的:
缺乏扩展阻止了Nokogiri的运行.
扩展名存在于ext
gem 的文件夹中(您可以在这里阅读它们):
Mysql2
,RMagick
,PGSQL
,Nokogiri
等所有使用扩展/库.
这就是为什么 - 在Windows上 - 你必须--with-opt-dir
在安装gem时使用自定义开关().这为Ruby/shell /(cmd
)提供了构建gem文件所需的必需lib
/ include
目录(它相当于PATH
工作方式).
在Linux
/上Mac
,这些目录由相应的包管理器(brew
/ apt-get
)管理.Windows没有此功能,因此您必须手动安装扩展.
由于Windows没有标准的库集,因此您必须自己下载它们.你还必须自己构建它们(这很棘手).
Nokogiri安装的修复是使用正确的库和构建工具来安装gem.
建立
与Ruby 2.2+的区别在于gem将"安装"而不显示任何异常.你认为它已经安装,只是发现Rails 没有加载(因此nokogiri/nokogiri.so
错误).
这意味着您必须确保系统上有文件,并运行编译器来安装它们.
上面的文档应该告诉你如何做到这一点.