pg_config, ruby ​​pg, postgresql 9.0 проблема после обновления, centos 5

После обновления Postgresql 8.1 до 9.0 я заметил проблемы с зависимостью библиотек. Postgresql отлично работает (соединение, запросы).

yum list postgresql*
Installed Packages
postgresql.i386 9.0.0-1PGDG.el5 installed
postgresql-debuginfo.i386 9.0.0-1PGDG.el5 installed
postgresql-devel.i386 9.0.0-1PGDG.el5 installed
postgresql-libs.i386 9.0.0-1PGDG.el5 installed
postgresql-odbcng.i386 0.90.101-2.el5 installed
postgresql-plruby.i386 0.5.1-5.el5 installed
postgresql-server.i386 9.0.0-1PGDG.el5 install

но когда я пытаюсь установить 'pg' для ruby, я получил

gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb
checking for pg_config... no
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

При попытке с другим драйвером ruby-postgres, я получил

yum install ruby-postgres
ruby-postgres-0.7.1-5.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libpq.so.4 is needed by package ruby-postgres-0.7.1-5.el5.i386 (epel)

а также

locate libpq.so.4
/usr/lib/libpq.so.4
/usr/lib/libpq.so.4.1

также экспортируемый путь

LD_LIBRARY_PATH=/usr/pgsql-9.0/lib
export LD_LIBRARY_PATH

после запуска сценария ruby ​​с "require pg" (работает на 8.1), я получил:

/usr/local/lib/ruby/site_ruby/1.8/i686-linux/pg_ext.so: libpq.so.4: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/site_ruby/1.8/i686-linux/pg_ext.so (LoadError)
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'
        from /usr/local/lib/ruby/site_ruby/1.8/pg.rb:12
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'

Любые предложения, что делать больше?

5 ответов

Существуют различные параметры конфигурации, которые вы можете добавить к установке gem, например: -with-opt-dir, --with-pg-dir а также --with-pg-config, Посмотрите на эту ветку списка рассылки:

http://www.ruby-forum.com/topic/409608

$ gem --version
1.3.7

$ ruby ​​--version
ruby 1.9.2p180 (2011-02-18 редакция 30909) [x86_64-linux]

$ cat / etc / redhat-release 
CentOS релиз 5.4 (финал)

$ uname -m
x86_64

список sudo yum установлен | grep postgre    (посмотрите, что вы установили)
список sudo yum доступен | grep postgre    (мне не хватало postgresql-devel)
sudo yum установить postgresql-devel         (я установил его)
sudo gem install pg (на этот раз без ошибок!)

$ gem list --local | grep pg
pg (0.11.0)

Это похоже на ошибку расположения файла конфигурации pg,

gem install pg -- --with-pgsql-lib=/usr/pgsql-9.0/lib --with-pg-config=/usr/pgsql-9.1/bin/pg_config

решает это!!

gem install pg -- --with-pgsql-lib=/usr/pgsql-9.0/lib --with-pg-config=/usr/pgsql-9.1/bin/pg_config

/usr/local/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
Building native extensions.  This could take a while...
Successfully installed pg-0.14.0
1 gem installed
Installing ri documentation for pg-0.14.0...
Installing RDoc documentation for pg-0.14.0...

В Mac OSX 10.6.8, используя установку MacPorts Postgres 9, у меня работала следующая команда:

gem install pg -- --with-pgsql-lib=/opt/local/lib/postgresql90/lib --with-pg-config=/opt/local/lib/postgresql90/bin/pg_config

libpq.so.4 из более старой версии PostgreSQL; 9.0 поставляется с /usr/pgsql-9.0/lib/libpq.so.5

Если у вас есть программа, созданная на основе libpq.so.4, этот файл предоставляется пакетами compat -postgresql-libs, которые вы, возможно, не установили. Многие люди удаляют его, используя "--force", потому что иначе может быть сложно установить более новые RPM; это плохая идея, но альтернатива сложна. Если вы установили этот пакет, вы должны найти /usr/lib/libpq.so.4, который сделает вашу существующую программу, изначально скомпилированную для более старой версии PostgreSQL, счастливой.

Другие вопросы по тегам