解释此错误:警告:Nokogiri是针对LibXML版本2.7.3构建的,但动态加载了2.9.0

时间:2013-05-01 06:10:55

标签: ruby-on-rails ruby nokogiri spree libxml2

我刚刚安装了Spree电子商务CMS而没有太多头疼。我完全不知道这个消息意味着什么。有人可以慢慢向我解释这个吗?

Nokogiri似乎是某种渲染器?请向我解释一下,我认为rails服务器处理了所有资产的获取和渲染?

LibXML是一个XML C解析器。有人可以解释什么是XML C解析器吗?

'反对'意味着什么?

我很熟悉ruby,但我是部署新手。这个管理方面的事情是完全陌生的!谢谢你帮助我!

1 个答案:

答案 0 :(得分:7)

Nokogiri是一个XML解析库,实际上是LibXML的一个聪明的包装器,LibXML是一个用C语言编写的解析XML的库.Nokogiri包含C语言扩展,用于将其Ruby代码连接到LibXML。当您安装gem时,它将针对系统上可用的libxml头进行编译,但在运行时它将动态链接到系统上可用的libxml共享对象。当这些版本不匹配时会收到此警告 - 例如,如果在安装Nokogiri之后在系统上升级libxml2。

解决这个问题的方法是指定LibXML Nokogiri应该针对哪个版本构建。您可以在~/.bundle/config中进行设置,例如:

---
BUNDLE_BUILD__NOKOGIRI: --with-xml2-lib=/opt/libxml/lib--with-xml2-include=/opt/libxml/include/libxml2 --with-xslt-lib=/opt/libxml/lib --with-xslt-include=/opt/libxml/include

这基本上只是设置在构建Nokogiri扩展时要传递的编译标志,它允许您指定要使用的LibXML安装的位置。卸载Nokogiri并让Bundler在放置该配置(和正确的libxml2版本)之后重新安装它,所有这些都将按预期工作。