2012-05-08 48 views
2

我們在Rails項目中有一個構建管道:我們在測試服務器中捆綁並測試應用程序,然後我們將它複製到登臺服務器並將其部署到一個臨時服務器上(代碼爲gem,代碼爲vendor/)乘客服務器。nokogiri:生產環境中的重定位錯誤

它用於工作,但現在我得到的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事情。

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 

回答

1

我解決了這個問題。我內置libxml2從源代碼,然後我配置bundler使用這個新的版本:

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

(現在我有一個警告,因爲加載的版本較新的一個被用來建引入nokogiri,但這不是一個問題)。

1

錯誤確實說明了一切:相同的二進制負載,如果我把它叫做獨立或與bundle exec不同的libxml版本不同。你的本地機器上有不同版本的LibXML(你的gem編譯的地方)version 2.7.6與你的服務器2.6.26一樣降級你的開發機器或在服務器上構建你的寶石

+0

謝謝,我檢查的libxml版本,參見編輯。 – mrzasa

0

如果問題64位裸機上仍然存在,我解決了它的zlib1g更新1.2.3從1.2.7到:

$> aptitude update 
$> aptitude install zlib1g