最近我在 Windows 上使用新的 RubyInstaller 安装了 Ruby 2.2.1。为了检查是否一切正常,我进入了一个 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)
Bundler 说它是 Using nokogiri 1.6.5
。此外,rake 任务在 Ruby 2.1.5 中运行良好。我很欣赏关于如何解决这个问题的想法。谢谢! :)
最佳答案
我想我已经在我的系统上运行了:
我不知道做了什么才能让它工作,但我会分享我所做的:
使用
Ruby 2.2+
和Nokogiri
的 Windows 问题是gem 无法编译。 Nokogiri 需要libXML
、libxslt
和libiconv
才能工作。这些名义上是在gem install
中编译的,但出于某种原因,这不会出现在Ruby 2.2+
中。因此,为了安装 gem(这与
mysql2
和rmagick
的情况完全相同),您需要系统依赖项(如上所述) .从
Ruby 2.2+
开始,似乎 gems 会“安装”即使它们不依赖于系统(而不是通过不构建 native 扩展来拒绝安装在以前的版本中)。出现的新运行时错误包括cannot load such file -- mysql2/2.2/mysql2 (LoadError)
以及nokogiri
的相应文件(无法加载此类文件 -- nokogiri/nokogiri
)。考虑到这一点,您必须了解这些 gem 的安装和工作方式。
mysql2
gem 就是一个很好的例子——要安装它,您需要 download the MYSQL C-Connector plugin然后使用以下代码链接到依赖项:gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector-path"'
使用
Nokogiri
,您的系统上需要有libxml
、libiconv
和libxslt
。我从this post了解到:
问题就出在这里。 我不是 100% 确定我在这里做了什么来让它工作(即使是暂时的)。我知道我安装了 Nokogiri gem,然后开始使用
ruby extconf.rb
编译 gem(这正是 gem 所做的)。考虑到我认为这是有效的,我将解释这是如何执行的。gem 通常会通过安装下载库。它将这些保存在
ext/tmp/ports
文件夹中。对于我的系统,libiconv
的下载导致安装无法完成 (error aboutCPPFLAGS
)。考虑到这一点,我认为如果安装了 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-on-rails - RubyInstaller 2.2.1 和 Rails - Rake 无法加载 Nokogiri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985328/