Ruby Nokogiri 1.6.0仍然在OS X上引入了错误版本的libxml

Ruby Nokogiri 1.6.0仍然在OS X上引入了错误版本的libxml,ruby,ruby-on-rails-3,macos,nokogiri,Ruby,Ruby On Rails 3,Macos,Nokogiri,网络上(包括堆栈溢出)到处都有这样的警告问题(和答案): 警告:Nokogiri是根据LibXML版本2.8.0构建的, 但是动态加载了2.7.8 这是由Nokogiri 1.6.0编写的: 这个版本的Nokogiri使用 宝石。这将解决大多数安装问题 因此,我卸载了brew版本的库,并安装了新的Nokogiri 1.6.0 gem(在Mac OS 10.8.4上,使用rvm 1.18.14Nokogiri-v输出) 诺科吉里(1.6.0) --- 警告:[] 诺科吉里:1.6.0 红宝石:

网络上(包括堆栈溢出)到处都有这样的警告问题(和答案):

警告:Nokogiri是根据LibXML版本2.8.0构建的,
但是动态加载了2.7.8
这是由Nokogiri 1.6.0编写的:

这个版本的Nokogiri使用 宝石。这将解决大多数安装问题

因此,我卸载了brew版本的库,并安装了新的Nokogiri 1.6.0 gem(在Mac OS 10.8.4上,使用
rvm 1.18.14
Nokogiri-v
输出)

诺科吉里(1.6.0) --- 警告:[] 诺科吉里:1.6.0 红宝石: 版本:1.9.3 平台:x86_64-darwin12.4.0 描述:ruby 1.9.3p392(2013-02-22修订版39386)[x86_64-darwin12.4.0] 引擎:红宝石 libxml: 绑定:扩展 资料来源:打包 libxml2_路径:/Users/user/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.6.0/ports/i686-apple-darwin11/libxml2/2.8.0 libxslt_path:/Users/user/.rvm/gems/ruby-1.9.3-p392/gems/nokogiri-1.6.0/ports/i686-apple-darwin11/libxslt/1.1.26 编译版本:2.8.0 加载:2.8.0 所以我认为我的问题已经解决了。但是没有。我的Rails 3.2.14应用程序仍然给我同样的警告:

user$rails c
警告:Nokogiri是根据LibXML版本2.8.0构建的,但动态加载了2.7.8

WTF?

好消息是,Nokogiri 1.6.0确实解决了不匹配的LibXML问题!不再需要在web上使用所有其他技巧来正确构建和加载旧版本的Nokogiri。如果您收到此警告,首先要做的是将Nokogiri升级到至少1.6.0

新的警告是,您必须让Nokogiri在任何需要LibXML的库之前加载。在我的例子中,RMagick在加载Nokogiri之前间接加载了系统LibXML库(2.7.8)

解决方案是将
gem'nokogiri'
移动到
Gemfile
的顶部,以便它首先加载,然后加载其打包的LibXML库(编译时使用的库)。如果它根本不在您的gem文件中,那么它正被依赖于它的某个东西拉入,您可以添加
gem'nokogiri'
作为第一个gem

仅供参考,您可以通过设置环境变量
DYLD\u PRINT\u libraries
来确定库的加载顺序(从而推断是什么gem导致了哪些库的加载),如中所示

DYLD_PRINT_LIBRARIES=1 rails c