RubyInstaller 2.2.1和Rails - Rake无法加载Nokogiri

Mys*_*ler 12 ruby ruby-on-rails

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

rake aborted!
LoadError: cannot load such file -- nokogiri/nokogiri
D:/Dev/Grummle/config/application.rb:7:in `<top (required)>'
D:/Dev/Grummle/Rakefile:4:in `<top (required)>'
LoadError: cannot load such file -- nokogiri/2.2/nokogiri
D:/Dev/Grummle/config/application.rb:7:in `<top (required)>'
D:/Dev/Grummle/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*eck 11

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

在此输入图像描述

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

  1. 带有Ruby 2.2+&的Windows问题Nokogirigem无法编译.Nokogiri要求libXML,libxsltlibiconv为了它的工作.这些名义上是在编译gem install,但无论出于何种原因,这不会发生在Ruby 2.2+.

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

  3. Ruby 2.2+,似乎宝石将"安装"即使他们没有依赖于系统(而不是通过不在以前的版本中构建本机扩展来拒绝安装).出现的新运行时错误包括cannot load such file -- mysql2/2.2/mysql2 (LoadError)nokogiri(cannot load such file -- nokogiri/nokogiri)的相应一个.

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

  5. 有了Nokogiri,您需要拥有libxml,libiconv并且libxslt在您的系统上.我从这篇文章中了解到:

在此输入图像描述

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

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

  3. 因此,我ruby ext/extconf.rb使用--use-system-libraries交换机处理过程:

"...\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".当a Makefile可用时,您应该能够使用nmake(Windows 7.1 SDK)或make(MingW)来运行它.我这样做了,似乎有效.

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

这是我现在最好的.

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


Fer*_*ira 9

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

Paul GrantDaniel Rikowski的积分帮助!

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

1)卸载nokogiri宝石(你需要确认,因为许多宝石依赖它)

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/mrigem子文件夹:(我正在使用Cygwin)

cd /cygdrive/c/Ruby22/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x86-mingw32/ext/mri
Run Code Online (Sandbox Code Playgroud)

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服务器.像魅力一样工作!


spo*_*ter 5

Nokogiri在Windows 2.2上还没有Ruby 2.2.

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

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