"不兼容的库版本"在nokogiri

时间:2015-09-28 22:38:32

标签: ruby ubuntu nginx nokogiri

我已升级(apt-upgrade)我的Ubuntu 14.03服务器,包括gitlab-ce。现在我的Ruby(机架)网站似乎不再起作用了。我收到以下错误:

    mov r15d, edx
    rol r15, 32
    mov r15d, eax

我用Nginx运行Passenger,通常工作正常但仍然可以。 Geminthebox仍然有效。我认为这不是Nginx或Passenger相关的,而是'只是'一些无法相处的宝石。有没有人有这种错误的经验?

更新

我的客户网站的功能目前还不需要消毒,因此我禁用了该部分,使客户网站再次运行。

在那个过程中,我注意到它对于zipruby宝石也是如此。而且我还注意到更多的宝石会产生这个错误。因此,它不是宝石本身,而是一个底层的图书馆。我在产生这个错误的宝石上做了一些ldd,即nokogiri上的ldd

incompatible library version - /home/taco/.rvm/gems/ruby-2.1.2/gems/nokogiri-1.6.6.2/lib/nokogiri/nokogiri.so (LoadError)
/home/taco/.rvm/gems/ruby-2.1.2/gems/nokogiri-1.6.6.2/lib/nokogiri.rb:29:in `require'
/home/taco/.rvm/gems/ruby-2.1.2/gems/nokogiri-1.6.6.2/lib/nokogiri.rb:29:in `rescue in <top (required)>'
/home/taco/.rvm/gems/ruby-2.1.2/gems/nokogiri-1.6.6.2/lib/nokogiri.rb:25:in `<top (required)>'
/home/taco/.rvm/gems/ruby-2.1.2/gems/nokogumbo-1.4.1/lib/nokogumbo.rb:1:in `require'
/home/taco/.rvm/gems/ruby-2.1.2/gems/nokogumbo-1.4.1/lib/nokogumbo.rb:1:in `<top (required)>'
/home/taco/.rvm/gems/ruby-2.1.2/gems/sanitize-4.0.0/lib/sanitize.rb:3:in `require'
/home/taco/.rvm/gems/ruby-2.1.2/gems/sanitize-4.0.0/lib/sanitize.rb:3:in `<top (required)>'
...

我也尝试了nokogumbo,zipruby,rest-client和其他几个。我还是找不到一些奇怪的东西。

BTW:你可能已经注意到了,我尝试了几件事,比如通过rvm等使用不同的ruby版本,所以上面例子中的ruby版本有所不同。

1 个答案:

答案 0 :(得分:1)

在我的系统(Mac OS X)上查看我的Nokogiri安装,我看到Nokogiri的c扩展部分使用以下库:

/Users/me/.rvm/rubies/ruby-1.9.3-p550/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
/usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.9.0)
/usr/lib/libxslt.1.dylib (compatibility version 3.0.0, current version 3.26.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current version 53.1.0)
/usr/lib/libexslt.0.dylib (compatibility version 9.0.0, current version 9.15.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/local/Cellar/gcc48/4.8.3/lib/gcc/x86_64-apple-darwin14.0.0/4.8.3/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

其中我很确定Nokogiri在其他平台上使用libxml2,libxslt,libz,libicucore和libexslt。我假设通过升级你的Ubuntu版本,它升级了一些系统库,这些系统库与你编译的Nokogiri安装库不同。

我要做的是找到您的Nokogiri gem安装生成的库,其中包含所有c代码并在其上运行ldd。您的系统应该告诉您它是否正在查找它尝试链接的库。我的猜测是你至少会有一个失踪。

简单的解决方案是重新安装Nokogiri,以便它针对您的新库版本进行编译。