Rails pg gem 库版本不兼容
Rails pg gem Incompatible library version
当我尝试以开发模式访问 Rails 网站上的 Ruby 时,出现以下 'incompatible library version' 错误。
incompatible library version - /var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg_ext.so (LoadError)
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg.rb:4:in `require'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg.rb:4:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `each'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `block in require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `each'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler.rb:134:in `require'
/var/www/vhosts/launch.site.com/httpdocs/config/application.rb:7:in `<top (required)>'
/var/www/vhosts/launch.site.com/httpdocs/config/environment.rb:2:in `require'
/var/www/vhosts/launch.site.com/httpdocs/config/environment.rb:2:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'
我查看了哪些库 pg_ext.so
正在尝试访问和使用 ldd
,这是输出:
$ ldd pg-0.18.4/lib/pg_ext.so
linux-vdso.so.1 => (0x00007ffc14a7c000)
libruby.so.1.8 => /usr/lib64/libruby.so.1.8 (0x00007fe98291a000)
libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fe9826f1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe9824cb000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe9822c3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe9820be000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe981e87000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe981c03000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe98186e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe981658000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fe9813ec000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fe981008000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fe980dc4000)
libldap_r-2.4.so.2 => /usr/lib64/libldap_r-2.4.so.2 (0x00007fe980b6c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe982e47000)
libfreebl3.so => /usr/lib64/libfreebl3.so (0x00007fe980968000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fe980681000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe98047d000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fe980250000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe98003a000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fe97fe2f000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe97fc2b000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe97fa11000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007fe97f802000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fe97f5e7000)
libssl3.so => /usr/lib64/libssl3.so (0x00007fe97f3a7000)
libsmime3.so => /usr/lib64/libsmime3.so (0x00007fe97f17b000)
libnss3.so => /usr/lib64/libnss3.so (0x00007fe97ee3b000)
libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fe97ec0f000)
libplds4.so => /lib64/libplds4.so (0x00007fe97ea0b000)
libplc4.so => /lib64/libplc4.so (0x00007fe97e805000)
libnspr4.so => /lib64/libnspr4.so (0x00007fe97e5c7000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe97e3a7000)
我试过使用 yum update 更新 PostgreSQL,然后 gem 卸载 pg 和 gem 安装 pg。但我继续遇到同样的问题。 gem 本身安装没有任何错误。
我不太确定如何进一步调试。我需要做什么来安装、更新或引用必要的兼容库?
服务器是运行:
- CentOS 6.7
- psql (PostgreSQL) 8.4.20
- ruby 2.2.3p173(2015-08-18 修订版 51636)[x86_64-linux]
- rails 4.2.4
- pg gem 0.18.4
谢谢
看来您可能遇到了这个错误:
https://bitbucket.org/ged/ruby-pg/issues/229/pg_exit-improperly-linked-when-using-rvm
显然 libruby 版本应该不同。
但是:我有同样的错误信息,而且我的 libruby 是正确的,所以我认为可能还有更多的事情发生......
我在控制台 rails c
中调用时遇到同样的错误。调用 bundle exec rails c
删除了该错误。
尝试:
$ gem install pg
$ gem pristine --all
在查看关于 https://bitbucket.org/ged/ruby-pg/issues/229/pg_ext-improperly-linked-when-using-rvm 的讨论后,我设法让它在 Arch Linux 上工作的唯一方法是删除系统范围的 ruby,然后我做了
gem uninstall pg
后跟 gem install pg --version 0.18.3
。这使问题消失了。之后我重新安装了系统范围的ruby。
在我的设置中,我没有根据系统范围 ruby 打包,所以可以删除它,但是 YMMV。
我遇到了这个问题。我有 ruby 2.2.1。我将 ruby 升级到 2.3.3 并在它工作之后。试试这个指令:
rvm install ruby-2.3.3
rvm gemset empty
gem install bundler
bundle install
当我尝试以开发模式访问 Rails 网站上的 Ruby 时,出现以下 'incompatible library version' 错误。
incompatible library version - /var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg_ext.so (LoadError)
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg.rb:4:in `require'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/pg-0.18.4/lib/pg.rb:4:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `each'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `block in require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `each'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `require'
/usr/local/rvm/gems/ruby-2.2.3/gems/bundler-1.10.6/lib/bundler.rb:134:in `require'
/var/www/vhosts/launch.site.com/httpdocs/config/application.rb:7:in `<top (required)>'
/var/www/vhosts/launch.site.com/httpdocs/config/environment.rb:2:in `require'
/var/www/vhosts/launch.site.com/httpdocs/config/environment.rb:2:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
/var/www/vhosts/launch.site.com/httpdocs/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'
我查看了哪些库 pg_ext.so
正在尝试访问和使用 ldd
,这是输出:
$ ldd pg-0.18.4/lib/pg_ext.so
linux-vdso.so.1 => (0x00007ffc14a7c000)
libruby.so.1.8 => /usr/lib64/libruby.so.1.8 (0x00007fe98291a000)
libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fe9826f1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe9824cb000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe9822c3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe9820be000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe981e87000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe981c03000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe98186e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe981658000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fe9813ec000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fe981008000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fe980dc4000)
libldap_r-2.4.so.2 => /usr/lib64/libldap_r-2.4.so.2 (0x00007fe980b6c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe982e47000)
libfreebl3.so => /usr/lib64/libfreebl3.so (0x00007fe980968000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fe980681000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe98047d000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fe980250000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe98003a000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fe97fe2f000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe97fc2b000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe97fa11000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007fe97f802000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fe97f5e7000)
libssl3.so => /usr/lib64/libssl3.so (0x00007fe97f3a7000)
libsmime3.so => /usr/lib64/libsmime3.so (0x00007fe97f17b000)
libnss3.so => /usr/lib64/libnss3.so (0x00007fe97ee3b000)
libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fe97ec0f000)
libplds4.so => /lib64/libplds4.so (0x00007fe97ea0b000)
libplc4.so => /lib64/libplc4.so (0x00007fe97e805000)
libnspr4.so => /lib64/libnspr4.so (0x00007fe97e5c7000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe97e3a7000)
我试过使用 yum update 更新 PostgreSQL,然后 gem 卸载 pg 和 gem 安装 pg。但我继续遇到同样的问题。 gem 本身安装没有任何错误。
我不太确定如何进一步调试。我需要做什么来安装、更新或引用必要的兼容库?
服务器是运行:
- CentOS 6.7
- psql (PostgreSQL) 8.4.20
- ruby 2.2.3p173(2015-08-18 修订版 51636)[x86_64-linux]
- rails 4.2.4
- pg gem 0.18.4
谢谢
看来您可能遇到了这个错误: https://bitbucket.org/ged/ruby-pg/issues/229/pg_exit-improperly-linked-when-using-rvm
显然 libruby 版本应该不同。
但是:我有同样的错误信息,而且我的 libruby 是正确的,所以我认为可能还有更多的事情发生......
我在控制台 rails c
中调用时遇到同样的错误。调用 bundle exec rails c
删除了该错误。
尝试:
$ gem install pg
$ gem pristine --all
在查看关于 https://bitbucket.org/ged/ruby-pg/issues/229/pg_ext-improperly-linked-when-using-rvm 的讨论后,我设法让它在 Arch Linux 上工作的唯一方法是删除系统范围的 ruby,然后我做了
gem uninstall pg
后跟 gem install pg --version 0.18.3
。这使问题消失了。之后我重新安装了系统范围的ruby。
在我的设置中,我没有根据系统范围 ruby 打包,所以可以删除它,但是 YMMV。
我遇到了这个问题。我有 ruby 2.2.1。我将 ruby 升级到 2.3.3 并在它工作之后。试试这个指令:
rvm install ruby-2.3.3
rvm gemset empty
gem install bundler
bundle install