【问题标题】:RubyInstaller 2.2.1 and Rails - Rake cannot load NokogiriRubyInstaller 2.2.1 和 Rails - Rake 无法加载 Nokogiri
【发布时间】:2020-05-19 15:14:10
【问题描述】:

最近我在 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-on-rails ruby


【解决方案1】:

我想我可以在我的系统上运行它:

我不知道我做了什么让这个工作,但我会分享我做了什么:

  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/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了解到:

  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"

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

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

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

这是我目前最好的。

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

【讨论】:

  • 我认为降级到 Ruby 2.1 或在 Linux 系统上开发是目前最好的解决方案。我在尝试学习 Rails 时遇到了这个错误。这很烦人,因为它很耗时。这让我怀疑 Rails 是否真的是一个稳定的框架。无论如何,您能否在不同的 Windows 64 位系统上重复您的解决方案?
  • 嘿伙计,我还没有尝试过不同的系统。我必须得到一些其他的东西(MingW64 编译器等),然后就去做了。如果它使用相同的依赖项,我不明白为什么我们不能安装 Nokogiri。我的 Skype 是“gorkite” - 如果你加我,我会看看我们是否可以为你工作
  • Rails 一个稳定的框架,这是一个 Ruby 问题,而且众所周知,Windows 对开发不友好。我们做了很多 gfx,所以我喜欢可访问性,因此让它在 Win 上运行至关重要。
【解决方案2】:

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

感谢 Paul GrantDaniel Rikowski 的帮助!

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

1) 卸载 nokogiri gem(您需要确认,因为许多 gem 都依赖它)

2) 在此处下载在 ruby​​ 2.2 by 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 的 posted,您可以构建您的 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 服务器。像魅力一样工作!

【讨论】:

  • 有一个适用于 Windows 的新候选发布 (RC) 版本。只需添加到您的 Gemfile:gem 'nokogiri', '1.6.7.rc3'
【解决方案3】:

对于 Windows 上的 Ruby 2.2,Nokogiri 尚不存在。

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

本质上,nokogiri 是为特定的 ruby​​ 版本提供预编译的,而 2.2 还不是这些版本之一。为 windows 编译 nokogiri 过于复杂。

【讨论】:

  • 问题是之前版本的 ruby​​installer 包含一个小错误,导致 seg 错误,所以很多人切换到 ruby​​installer 2.2,现在又面临这个问题.... :\
【解决方案4】:

nokogiri 最新 RC 版本支持 Ruby 2.2:

gem install nokogiri --pre

【讨论】:

  • 是的!这种工作形式。必须先gem uninstall nokogiri 所有版本和可执行文件。也使用命令提示符(管理员)。
【解决方案5】:

您可以尝试使用交叉编译的 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. 在您的 Gemfile 中锁定 nokogiri 版本:

    宝石'nokogiri','1.6.6.2'

【讨论】:

    【解决方案6】:

    我必须为这个 ruby​​ 版本安装 nokogiri 版本 1.6.3.1,我把它放好并为我工作:

     gem install nokogiri -v 1.6.3.1 -- --use-system-libraries --with-xml2-include=/usr/local/opt/libxml2/include/libxml2/
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2015-05-15
      • 2021-04-08
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      相关资源
      最近更新 更多