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过于复杂。
我想我在我的系统上工作了:
我不知道为了让这项工作做了什么,但我将分享我的所作所为:
-
使用
Ruby 2.2+
和Nokogiri
Windows的问题是gem不能编译 。 Nokogiri需要libXML
,libxslt
和libiconv
才能使用它。 这些名义上是在gem install
编译的,但无论出于何种原因,这在Ruby 2.2+
都不会发生。 -
因此,为了安装gem(这与
mysql2
和rmagick
情况完全相同),您需要系统依赖(如上所述)。 -
从
Ruby 2.2+
,即使他们没有依赖系统,gem也会“安装”(而不是通过在以前的版本中不构建原生扩展来拒绝安装)。 出现的新运行时错误包括cannot load such file -- mysql2/2.2/mysql2 (LoadError)
和相应的nokogiri
cannot load such file -- nokogiri/nokogiri
(cannot load such file -- nokogiri/nokogiri
)。 -
考虑到这一点,您必须了解gem的安装和工作方式。 一个很好的例子是
mysql2
gem – 要安装它,你需要下载MYSQL C-Connector插件然后使用以下代码链接到依赖项:gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector-path"'
-
使用
Nokogiri
,您需要在系统上安装libxml
,libiconv
和libxslt
。 我从这篇文章中了解到:
-
问题出现在这里。 我不是百分百肯定我在这里做了什么让这个工作(甚至暂时)。 我知道我安装了Nokogiri gem,然后开始使用
ruby extconf.rb
编译gem(这就是gem所做的事情)。 考虑到这一点我认为有用,我将解释这是如何执行的。 -
gem通常会通过安装下载库。 它将这些保存在
ext/tmp/ports
文件夹中。 对于我的系统,libiconv
的下载是阻止安装完成的原因( 关于CPPFLAGS
错误 )。 考虑到这一点,我认为如果安装了gem,并且如果它正在尝试构建,那么安装依赖项是明智的。 -
因此,我使用
--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"
我将此与下载上述库(以及一些无效的库)相结合:
-
我没有上述命令输出的记录,但我很确定它根据需要构建了扩展,最后说的是编译了“Makefile”。 当
Makefile
可用时,您应该能够使用nmake
( Windows 7.1 SDK )或make
(MingW)来运行它。 我做了这个,似乎工作。 -
我今天尝试加载服务器,它似乎工作。
这是我现在最好的。
我可以根据需要回答评论等。
在他们为Ruby 2.2发布适当的nokogiri版本之前,我想与大家分享一些让它运行的步骤。
Paul Grant和Daniel 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。 对我来说工作正常。
-
删除之前安装的所有nokogiri版本
gem卸载nokogiri
-
从https://github.com/paulgrant999/ruby-2.2.2-nokogiri-1.6.6.2-x86-x64-mingw32.gem下载gem
-
使用以下命令之一安装:
对于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
-
锁定版本的nokogiri我的Gemfile:
gem’nokogiri’,’1.6.6.2′