RubyInstaller 2.2.1和Rails – Rake无法加载Nokogiri

最近我在Windows上安装了Ruby 2.2.1和新的RubyInstaller。 为了检查一切是否正常工作,我进入了一个rails应用程序并运行了bundle install ,运行正常。 但是,当我使用bunle exec rake test运行bunle exec rake test ,我收到以下错误:

 rake aborted! LoadError: cannot load such file -- nokogiri/nokogiri D:/Dev/Grummle/config/application.rb:7:in `' D:/Dev/Grummle/Rakefile:4:in `' LoadError: cannot load such file -- nokogiri/2.2/nokogiri D:/Dev/Grummle/config/application.rb:7:in `' D:/Dev/Grummle/Rakefile:4:in `' (See full trace by running task with --trace) 

Bundler说这是Using nokogiri 1.6.5 。 此外,rake任务在Ruby 2.1.5中运行良好。 我很欣赏有关如何解决问题的想法。 谢谢! 🙂

Nokogiri在Windows 2.2上还没有Ruby 2.2。

https://github.com/sparklemotion/nokogiri/issues/1256

从本质上讲,nokogiri是针对特定的ruby版本进行了预编译的,2.2还不是其中之一。 为windows编译nokogiri过于复杂。

我想我在我的系统上工作了:

在此处输入图像描述

我不知道为了让这项工作做了什么,但我将分享我的所作所为:

  1. 使用Ruby 2.2+Nokogiri Windows的问题是gem不能编译 。 Nokogiri需要libXMLlibxsltlibiconv才能使用它。 这些名义上是在gem install编译的,但无论出于何种原因,这在Ruby 2.2+都不会发生。

  2. 因此,为了安装gem(这与mysql2rmagick情况完全相同),您需要系统依赖(如上所述)。

  3. Ruby 2.2+ ,即使他们没有依赖系统,gem也会“安装”(而不是通过在以前的版本中不构建原生扩展来拒绝安装)。 出现的新运行时错误包括cannot load such file -- mysql2/2.2/mysql2 (LoadError)和相应的nokogiri cannot load such file -- nokogiri/nokogiricannot load such file -- nokogiri/nokogiri )。

  4. 考虑到这一点,您必须了解gem的安装和工作方式。 一个很好的例子是mysql2 gem – 要安装它,你需要下载MYSQL C-Connector插件然后使用以下代码链接到依赖项: gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector-path"'

  5. 使用Nokogiri ,您需要在系统上安装libxmllibiconvlibxslt 。 我从这篇文章中了解到:

在此处输入图像描述

  1. 问题出现在这里。 我不是百分百肯定我在这里做了什么让这个工作(甚至暂时)。 我知道我安装了Nokogiri gem,然后开始使用ruby extconf.rb编译gem(这就是gem所做的事情)。 考虑到这一点我认为有用,我将解释这是如何执行的。

  2. gem通常会通过安装下载库。 它将这些保存在ext/tmp/ports文件夹中。 对于我的系统, libiconv的下载是阻止安装完成的原因( 关于CPPFLAGS错误 )。 考虑到这一点,我认为如果安装了gem,并且如果它正在尝试构建,那么安装依赖项是明智的。

  3. 因此,我使用--use-system-libraries开关处理ruby ext/extconf.rb进程:

"...\nokogiri>ruby extconf.rb --platform=ruby -N --use-system-libraries --w ith-xml2-dir=C:\Users\Richard\Downloads\Ruby\libxml2-2.7.8.win32 --with-xml2-include=C:\Users \Richard\Downloads\Ruby\libxml2-2.7.8.win32\include --with-xml2-lib=C:\Users\Ric hard\Downloads\Ruby\libxml2-2.7.8.win32\lib --with-iconv-dir=C:\Users\Richard\Do wnloads\Ruby\iconv-1.9.2.win32 --with-iconv-include=C:\Users\Richard\Downloads\R uby\iconv-1.9.2.win32\include --with-iconv-lib=C:\Users\Richard\Downloads\Ruby\i conv-1.9.2.win32\lib --with-zlib-dir=C:\Users\Richard\Downloads\Ruby\zlib-1.2.5"

我将此与下载上述库(以及一些无效的库)相结合:

在此处输入图像描述

  1. 我没有上述命令输出的记录,但我很确定它根据需要构建了扩展,最后说的是编译了“Makefile”。 当Makefile可用时,您应该能够使用nmake ( Windows 7.1 SDK )或make (MingW)来运行它。 我做了这个,似乎工作。

  2. 我今天尝试加载服务器,它似乎工作。

这是我现在最好的。

我可以根据需要回答评论等。

在他们为Ruby 2.2发布适当的nokogiri版本之前,我想与大家分享一些让它运行的步骤。

Paul GrantDaniel Rikowski的积分帮助!

首先,我必须说我在Windows 8.1(64位)上运行Ruby 2.2.2p95(32位)并安装了Rails 4.2.3(以及Cygwin shell)

1)卸载nokogirigem(你需要确认,因为许多gem依赖它)

2)下载由Paul Grant编译的nokogiri gem(对他来说是荣誉): https : //github.com/paulgrant999/ruby-2.2.2-nokogiri-1.6.6.2-x86-x64-mingw32.gem

3)安装了本地gem( gem install --local path/to/gem )32位版本(在我的例子中)

如果您尝试在此处加载rails,则bcrypt将失败,因此,正如Daniel Rikowski 发布的那样,您可以构建基于bcrypt_ext.so文件。

4)确保你的路径上有DevKit( /devkit/bin/devkit/mingw/bin

5)转到bcrypt ext/mri gem子文件夹:(我正在使用Cygwin)

 cd /cygdrive/c/Ruby22/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x86-mingw32/ext/mri 

6)调用ruby extconf.rb (生成Makefile)

7)只需调用make

(它将输出许多文件,包括bcrypt_ext.so文件)

8)将bcrypt_ext.so复制到/cygdrive/c/Ruby22/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x86-mingw32/lib/2.2文件夹。 您必须创建此子文件夹。

而已! 现在就开始使用rails服务器。 像魅力一样工作!

nokogiri的最新RC版本支持Ruby 2.2:

 gem install nokogiri --pre 

您可以尝试使用交叉填充的gem。 对我来说工作正常。

  1. 删除之前安装的所有nokogiri版本

    gem卸载nokogiri

  2. 从https://github.com/paulgrant999/ruby-2.2.2-nokogiri-1.6.6.2-x86-x64-mingw32.gem下载gem

  3. 使用以下命令之一安装:

    对于64位Ruby: gem install --local nokogiri-1.6.6.2-x64-mingw32.gem

    对于32位Ruby: gem install --local nokogiri-1.6.6.2-x86-mingw32.gem

  4. 锁定版本的nokogiri我的Gemfile:

    gem’nokogiri’,’1.6.6.2′