我们在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
答案 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