ruby on rails - rails - No se puede encontrar la biblioteca de cliente de PostgreSQL(libpq)
postgresql client linux (14)
Estoy tratando de instalar PostgreSQL for Rails en Mac OS X 10.6. Primero probé la instalación de MacPorts pero no funcionó, así que hice la instalación de DMG con un solo clic. Eso pareció funcionar.
Sospecho que necesito instalar los paquetes de desarrollo de PostgreSQL, pero no tengo idea de cómo hacerlo en OS X.
Esto es lo que obtengo cuando intento hacer sudo gem install pg
:
$ sudo gem install pg
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can''t find the PostgreSQL client library (libpq)
*** 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.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
--with-pg
--without-pg
--with-pg-dir
--without-pg-dir
--with-pg-include
--without-pg-include=${pg-dir}/include
--with-pg-lib
--without-pg-lib=${pg-dir}/lib
--with-pg-config
--without-pg-config
--with-pg_config
--without-pg_config
--with-pqlib
--without-pqlib
--with-libpqlib
--without-libpqlib
--with-ms/libpqlib
--without-ms/libpqlib
Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out
Así es como lo hice para trabajar en Mavericks. Nota: Ya había instalado postgresql 9.3 desde homebrew.
Actualice Xcode a 5.0 desde App Store
Instalar herramientas de desarrollador de línea de comando
xcode-select --install
Aceptar la licencia de Xcode
sudo xcodebuild -license
Instalar gema
ARCHFLAGS = "- arch x86_64" joya instalar pg
Así que, básicamente, hice esto ;-)
brew install postgres
El problema que tuvimos fue bastante extraño.
ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
pero cuando hicimos un paquete de instalación de hecho, no se instaló el paquete para la versión de ruby que fue instalada por rbenv, entonces, cuando escribimos bundle install, usó el paquete del sistema.
Por lo tanto, antes de ejecutar la instalación del paquete, asegúrese de haber instalado el paquete ejecutando
gem install bundler
Esto es lo que finalmente hizo por mí (combinación de múltiples soluciones proporcionadas anteriormente junto con otras publicaciones):
$ sudo env ARCHFLAGS = "- arch x86_64" gem install pg - with-pg-include = / Library / PostgreSQL / 9.6 / include /
Fake out gem
prefijando las variables de entorno apropiadas. Si estaba instalando desde MacPorts, debería poder seguir el siguiente procedimiento:
% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = ''--prefix=/opt/local'' ''--sysconfdir=/opt/local/etc/postgresql91'' ''--bindir=/opt/local/lib/postgresql91/bin'' ''--libdir=/opt/local/lib/postgresql91'' ''--includedir=/opt/local/include/postgresql91'' ''--datadir=/opt/local/share/postgresql91'' ''--mandir=/opt/local/share/man'' ''--with-includes=/opt/local/include'' ''--with-libraries=/opt/local/lib'' ''--with-openssl'' ''--with-bonjour'' ''--with-readline'' ''--with-zlib'' ''--with-libxml'' ''--with-libxslt'' ''--enable-thread-safety'' ''--enable-integer-datetimes'' ''--with-ossp-uuid'' ''CC=/usr/bin/gcc-4.2'' ''CFLAGS=-pipe -O2 -arch x86_64'' ''LDFLAGS=-L/opt/local/lib -arch x86_64'' ''CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp''
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL =
LDFLAGS = -L/opt/local/lib -arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm
VERSION = PostgreSQL 9.1beta1
A partir de ahí, extraiga el LIBDIR
, LIBDIR
, CPPFLAGS
, LIBS
y LDFLAGS
(sin LDFLAGS
el que creo que lo ejecutará es LIBDIR
). Entonces correría:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
Eso debería hacerlo por ti. Avísame si no es así.
Intenté la mejor respuesta aquí:
env ARCHFLAGS="-arch x86_64" gem install pg
Pero cuando intenté ejecutar bundle install nuevamente, tuve el mismo error. Luego probé todo el paquete de instalación con ARCHFLAGS así:
ARCHFLAGS="-arch x86_64" bundle install
¡Trabajó para mi! Asegúrese de reemplazar x86_64 con i386 según la arquitectura que tenga.
La respuesta de ARCHFLAGS
que otros han propuesto no funcionará si de alguna manera terminaste con una versión de 64 bits de postgres (que homebrew instalará) y una versión de 32 bits de ruby. Por alguna razón, rbenv
insiste en construir ruby 1.9.2-p290 como 32 bits para mí, lo que hace que sea imposible enlazar con postgres de 64 bits.
Verifica la arquitectura de tu binario ruby con
file `which ruby`
o si usa rbenv
file `rbenv which ruby`
Y compare contra su postgres:
file `which postgres`
Si hay un desajuste, tendrás que volver a instalar postgres o ruby. Con rbenv resolví esto simplemente cambiando a una versión diferente: 1.9.3-p194
vez de 1.9.2-p290
.
No creo que necesite los archivos de desarrollo de Postgres, todo lo que necesita debe haber sido incluido con su instalador. Es más probable que la ruta a la que están instalados no se encuentre en la ruta de su entorno y, por lo tanto, la gema no puede encontrarlos cuando intenta compilar la pg.
No debería tener que ejecutar gem install pg
como root; de hecho, si lo hace, es probable que su PATH (la RUTA de la raíz si se ejecute con sudo) no contenga la información necesaria.
Lo siguiente generalmente me funciona:
# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS=''-arch x86_64''
gem install pg
Probablemente llegue un poco tarde a la fiesta aquí, pero en mi caso estaba usando rbenv y actualizando a Ruby 2.2.3. Tuve que instalar Bundler para que el mío funcionara, tenía una versión anterior del sistema.
gem install bundler
Quizás puedas probar este:
ARCHFLAGS="-arch i386 -arch x86_64" gem install pg
Para conocer la arquitectura de tu biblioteca puedes usar
file /usr/local/lib/libpq.dylib
que dio solo 1 arquitectura en mi caso (instalado a través de homebrew):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
Si usa Yosemite:
brew install postgres
Entonces:
ARCHFLAGS="-arch x86_64" gem install pg
Y (opcional) finalmente, si quieres iniciar autovacuum ...
postgres -D /usr/local/var/postgres
Solo estaba teniendo este problema cuando uso el .dmg de EnterpiseDB. Si eso es lo mismo que piensas que usaste, lo hice funcionar especificando la arquitectura correcta:
sudo env ARCHFLAGS="-arch i386" gem install pg
Hay algunos tutoriales en la web que dicen especificar una arquitectura diferente (como "-arch x86_64" para las personas que usan MacPorts) pero no funcionaba para mí porque utilicé la instalación de un solo archivo.
Solución: se reinstaló PostgreSQL con Homebrew.
$ sudo su
$ env ARCHFLAGS="-arch x86_64" gem install pg
Building native extensions. This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...
¡TRABAJÓ!