4

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

所以我在这里查看了其他问题,并卸载了所有内容并再次尝试,但我注意到 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

我试过运行捆绑更新,但它仍然是一样的。

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

4

3 回答 3

2

所以你第一次跑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,买家要小心。

于 2012-08-03T16:53:23.920 回答
1

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

brew uninstall libxml2
brew uninstall libxslt

gem uninstall nokogiri
gem install nokogiri

达到很好的效果。此处推荐的 Ruby 1.9.3 的重新安装是不必要的。当然,只有在您之前安装过 libxslt 时才需要卸载它(就像我一样)。

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

brew missing

您是否意外删除了依赖项。

于 2013-01-09T17:48:46.897 回答
0

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

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

于 2013-06-19T18:49:29.560 回答