Rails pg gem Несовместимая версия библиотеки

Я получаю следующую ошибку «несовместимая версия библиотеки», когда пытаюсь получить доступ к моему веб-сайту Ruby on Rails в режиме разработки.

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)

Я пытался обновить PostgreSQL с помощью yum update, затем gem uninstall pg и gem install pg. Но я продолжаю получать ту же проблему. Сам гем устанавливается без ошибок.

Я не совсем уверен, как отлаживать дальше. Что мне нужно сделать, чтобы установить, обновить или сослаться на необходимые совместимые библиотеки?

Сервер работает:

  • ЦенОС 6.7
  • psql (PostgreSQL) 8.4.20
  • ruby 2.2.3p173 (версия 51636 18 августа 2015 г.) [x86_64-linux]
  • рельсы 4.2.4
  • пг драгоценный камень 0.18.4

Спасибо


person Boxhead    schedule 19.11.2015    source источник
comment
Вы пробовали «комплектовать все -- без производства»? Пожалуйста, проверьте stackoverflow.com/questions/11127486/   -  person Padhu    schedule 19.11.2015
comment
запустить bundle update, а затем bundle install   -  person ImranNaqvi    schedule 19.11.2015
comment
Спасибо, но ни то, ни другое не работает. Отмеченный ответ на связанный вопрос немного выше меня. Среды также разные (он был на Mac OSX, я на CentOS 6.7), поэтому файловая структура библиотеки совершенно другая. Кроме того, трассировка, которую я получаю, не говорит мне, какая из библиотек несовместима, насколько я могу судить, что значительно усложняет отладку.   -  person Boxhead    schedule 20.11.2015
comment
Я получаю ту же ошибку, но не использую Rails, просто pg.   -  person Andy Jones    schedule 14.01.2016


Ответы (5)


Пытаться:

$ gem install pg
$ gem pristine --all
person Salma Gomaa    schedule 18.04.2017
comment
Что это даст и как поможет решить проблему? - person Adam; 18.04.2017
comment
Это не сработало для меня, и это не дает мне никакой информации, чтобы понять, почему - person Eric Simonton; 09.11.2018
comment
Когда я выполнял rails console, он выходил без каких-либо строк журнала. Пробовал несколько решений, но это сделало свое очарование. - person Shubham; 02.06.2019
comment
Это решает проблему, но почему эта проблема возникает из ниоткуда? - person Dave Doga Oz; 06.06.2020
comment
@DaveDogaOz К сожалению, я не знаю - person Salma Gomaa; 08.06.2020

Похоже, вы страдаете от этой ошибки: https://bitbucket.org/ged/ruby-pg/issues/229/pg_exit-improperly-linked-when-using-rvm

По-видимому, версия libruby должна быть другой.

Однако: у меня такое же сообщение об ошибке, и моя библиотека верна, поэтому я думаю, что может быть что-то еще...

person Andy Jones    schedule 14.01.2016
comment
(Обновление до Ruby-2.3.0 исправило мою, возможно, другую проблему.) - person Andy Jones; 14.01.2016

Я получаю ту же ошибку, когда я вызываю консоль rails c. Вызов bundle exec rails c устранил эту ошибку.

person prograils    schedule 07.10.2016

Посмотрев обсуждение на https://bitbucket.org/ged/ruby-pg/issues/229/pg_ext-improperly-linked-when-using-rvm, единственный способ заставить его работать в Arch Linux — это удалить систему -широкий рубин, затем я сделал gem uninstall pg, а затем gem install pg --version 0.18.3. Это заставило проблему уйти. После этого я переустановил общесистемный рубин. В моей установке у меня не было упакованного в зависимости от общесистемного рубина, поэтому его можно было удалить, но YMMV.

person renatolond    schedule 13.09.2017

Я столкнулся с этой проблемой. У меня был рубин 2.2.1. Я обновил рубин до 2.3.3, и после этого он заработал. Попробуйте эту инструкцию:

rvm install ruby-2.3.3
rvm gemset empty
gem install bundler
bundle install
person vk26    schedule 05.06.2019