【问题标题】:Nokogiri problems with LibXML on Mountain LionMountain Lion 上的 LibXML 的 Nokogiri 问题
【发布时间】:2012-08-03 16:06:22
【问题描述】:

我最近对 ​​Mountain Lion 进行了全新安装,在安装 Nokogiri 后 - 启动 Rails 控制台时出现错误: WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8

所以我在 SO 上查看了其他问题,然后卸载了所有内容并再次尝试,但我注意到 Nokogiri 网站上的安装说明已过时:http://nokogiri.org/tutorials/installing_nokogiri.html

因为 'brew install libxml2 libxslt',实际上安装了 libxml2 2.8.0,并进一步阅读它引用 2.7.8 的说明:

gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 
                    --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib 
                    --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 
                    --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include 
                    --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

(注意 libxml2/2.7.8)

所以我再次卸载,然后重新安装:(libxml2/2.8.0)

sudo gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

虽然它在 IRB 中似乎可以正常工作,但在 Rails C 中却不行——它仍然说:

WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8

我试过运行包更新,但还是一样。

请问有什么办法可以解决这个问题吗?

【问题讨论】:

  • 我遇到了同样的问题。 nokogiri -v 的输出为:compiled: 2.8.0, loaded: 2.8.0。似乎只有 Rails 才有一个奇怪的问题。
  • 尝试 brew uninstall libxml2 并重试(如果不起作用,请卸载 nokogiri 并重新安装)。此外,在 gemfile 的顶部附近添加 PG gem。

标签: ruby-on-rails ruby nokogiri osx-mountain-lion


【解决方案1】:

所以您第一次运行gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib ... 时仍然显示“Nokogiri 是针对 LibXML 版本 2.8.0 构建的”?这看起来几乎就像它没有注意开关一样。

无论如何,问题与您的计算机所说的完全一样:它在运行时使用的 libxml*.so 是旧版本。试试man ldconfig,在标准目录中查找旧的 libxml 库。将新的放在它旁边并将符号链接指向它可能就足够了。

免责声明:我不是 osxer,买家小心。

【讨论】:

  • 嗨,我现在不确定原来的错误,因为我没有记下它(版本可能被翻转了?)。我尝试了您对“man ldconfig”的建议,但它显示“没有手动输入 ldconfig”。你能想到什么我可以尝试的吗?谢谢!
  • 您可以尝试发布实际的错误消息。而且,这并不难找到:stackoverflow.com/questions/1451047/ldconfig-for-mac-os-x
【解决方案2】:

除非您迫切需要使用更新版本的 libxml2,否则随 OS X Mountain Lion 分发的标准版本就可以了。我用过

brew uninstall libxml2
brew uninstall libxslt

gem uninstall nokogiri
gem install nokogiri

效果不错。不需要重新安装推荐的 Ruby 1.9.3 here。当然,只有在您之前安装过 libxslt 时才需要卸载它(就像我一样)。

如果您确实卸载了其中一个库,您可能希望通过以下方式进行检查

brew missing

您是否不小心删除了依赖项。

【讨论】:

    【解决方案3】:

    检查您的 gemfile 并确保 nokogiri 是隐式定义的——不要依赖隐含的包含来为您提供 nokogiri gem 的正确版本。

    如果您通过 brew 安装了 libxml2 和 libxslt,则卸载它们,通过 gem 卸载 nokogiri,然后通过 bundler install 重新安装。

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 2013-09-21
      • 2012-08-02
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多