ruby-on-rails - RubyInstaller 2.2.1 和 Rails - Rake 无法加载 Nokogiri

标签 ruby-on-rails ruby

最近我在 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 中运行良好。我很欣赏关于如何解决这个问题的想法。谢谢! :)

最佳答案

我想我已经在我的系统上运行了:

enter image description here

我不知道做了什么才能让它工作,但我会分享我所做的:

  1. 使用 Ruby 2.2+Nokogiri 的 Windows 问题是gem 无法编译。 Nokogiri 需要 libXMLlibxsltlibiconv 才能工作。这些名义上是在 gem install 中编译的,但出于某种原因,这不会出现在 Ruby 2.2+ 中。

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

  3. Ruby 2.2+ 开始,似乎 gems 会“安装”即使它们不依赖于系统(而不是通过不构建 native 扩展来拒绝安装在以前的版本中)。出现的新运行时错误包括 cannot load such file -- mysql2/2.2/mysql2 (LoadError)以及 nokogiri 的相应文件(无法加载此类文件 -- nokogiri/nokogiri)。

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

  5. 使用Nokogiri,您的系统上需要有libxmllibiconvlibxslt。我从this post了解到:

enter image description here

  1. 问题就出在这里。 我不是 100% 确定我在这里做了什么来让它工作(即使是暂时的)。我知道我安装了 Nokogiri gem,然后开始使用 ruby extconf.rb 编译 gem(这正是 gem 所做的)。考虑到我认为这是有效的,我将解释这是如何执行的。

  2. gem 通常会通过安装下载库。它将这些保存在 ext/tmp/ports 文件夹中。对于我的系统,libiconv 的下载导致安装无法完成 (error about 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"

我将此与下载上述库(以及一些不起作用)相结合:

enter image description here

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

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

这是我目前最好的。

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

关于ruby-on-rails - RubyInstaller 2.2.1 和 Rails - Rake 无法加载 Nokogiri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985328/

相关文章:

ruby-on-rails - rails 多对多自连接

ruby-on-rails - 在 Rails 控制台中使用 fixture finder helpers

ruby-on-rails - 使用 Capistrano 3 部署 git 本地存储库

ruby-on-rails - Rails 中模型的默认命名空间

ruby-on-rails - 合并具有多个键/值的散列

ruby-on-rails - 使用 Thinking Sphinx 按计数排序

ruby-on-rails - Rails 5,设计嵌套属性,不允许的参数

ruby-on-rails - PG::UndefinedColumn: 错误:列 comments.post_id 不存在

Ruby:正则表达式中的十六进制

ruby-on-rails - 在 Ruby 中读取文件的第一行