nokogiri:生产环境中的重定位错误

时间:2012-05-08 12:18:33

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

我们在Rails项目中有一个构建管道:我们在测试服务器中捆绑和测试应用程序,然后我们将它(带有vendor/中的gems的代码)复制到登台服务器并将其部署到乘客服务器。

过去常常有用,但现在我在apache.error.log中出现了以下错误:

WARNING: Nokogiri was built against LibXML version 2.7.6, but has dynamically loaded 2.6.26
/usr/local/rvm/rubies/ruby-1.9.2-p318/bin/ruby: 
  relocation error: /home/project/vendor/bundle/ruby/1.9.1/gems/nokogiri-1.5.2/lib/nokogiri/nokogiri.so: 
  symbol xmlNextElementSibling, version LIBXML2_2.7.3 not defined in file libxml2.so.2 with link time reference

和浏览器中的error 500

当我在登台服务器上运行webbrick时,在第一次请求时会出现类似的错误。我怎么能解决它?

修改 与nokogiri版本的Stange事情。相同的二进制文件加载不同的libxml版本,具体取决于我是单独调用还是使用bundle exec

vendor/bundle/ruby/1.9.1/gems/nokogiri-1.5.2/bin/nokogiri  -v
# Nokogiri (1.5.2)
---
warnings: []
nokogiri: 1.5.2
ruby:
  version: 1.9.2
  platform: x86_64-linux
  description: ruby 1.9.2p318 (2012-02-14 revision 34678) [x86_64-linux]
  engine: ruby
libxml:
  binding: extension
  compiled: 2.6.26
  loaded: 2.6.26

$ bundle exec vendor/bundle/ruby/1.9.1/gems/nokogiri-1.5.2/bin/nokogiri  -v
WARNING: Nokogiri was built against LibXML version 2.7.6, but has dynamically loaded 2.6.26
# Nokogiri (1.5.2)
---
warnings:
- Nokogiri was built against LibXML version 2.7.6, but has dynamically loaded 2.6.26
nokogiri: 1.5.2
ruby:
  version: 1.9.2
  platform: x86_64-linux
  description: ruby 1.9.2p318 (2012-02-14 revision 34678) [x86_64-linux]
  engine: ruby
libxml:
  binding: extension
  compiled: 2.7.6
  loaded: 2.6.26

3 个答案:

答案 0 :(得分:1)

错误确实说明了一切。您在本地计算机(编译gem的地方)version 2.7.6上有不同版本的LibXML,如同服务器2.6.26一样,要么降级开发机器,要么在服务器上构建宝石

答案 1 :(得分:1)

我解决了这个问题。我从源代码构建了libxml2,然后我将bundler配置为使用此新版本:

bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/usr/local

(现在我有一个警告,因为加载的版本比用于构建Nokogiri的版本更新,但这不是问题)。

答案 2 :(得分:0)

如果问题在64位裸机上仍然存在,我解决了将zlib1g从1.2.3更新到1.2.7的问题:

$> aptitude update
$> aptitude install zlib1g