Mountain Mountain上LibXML的Nokogiri问题

时间:2012-08-03 16:06:22

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

我最近彻底安装了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

我已经尝试过运行捆绑更新,但它仍然是相同的。

我有什么想法可以解决这个问题吗?

3 个答案:

答案 0 :(得分: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库的标准目录。它可能足以将新的一个放在它旁边,并将符号链接指向它。

免责声明:我不是奥斯陆,买家要小心。

答案 1 :(得分:1)

除非您迫切需要使用较新版本的libxml2,否则与OS X Mountain Lion一起发布的标准版本就可以了。我用过

brew uninstall libxml2
brew uninstall libxslt

gem uninstall nokogiri
gem install nokogiri
效果很好。不需要重新安装Ruby 1.9.3推荐here。当然,只有先前安装了libxslt(就像我一样),才需要卸载libxslt。

如果您确实卸载了其中一个库,您可能希望通过

进行检查
brew missing

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

答案 2 :(得分:0)

检查你的gemfile并确保隐含地定义了nokogiri - 不要依赖隐含的包含来为你提供正确版本的nokogiri gem。

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