2

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

它曾经可以工作,但现在我在以下错误中得到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 版本的 Strange 事情。相同的二进制文件加载不同的 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
4

3 回答 3

1

错误确实说明了一切。您在本地机器(编译 gem 的地方)上有不同版本的 LibXML,version 2.7.6因为在您的服务器2.6.26上降级您的开发机器或在服务器上构建您的 gem

于 2012-05-08T13:00:22.407 回答
1

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

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

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

于 2012-05-09T08:04:01.263 回答
0

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

$> aptitude update
$> aptitude install zlib1g
于 2012-05-24T10:58:15.953 回答