yml rails proyecto postgres new myapp datos crear configurar conectar ruby-on-rails ruby-on-rails-3 postgresql rubygems

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.

  1. Actualice Xcode a 5.0 desde App Store

  2. Instalar herramientas de desarrollador de línea de comando

    xcode-select --install

  3. Aceptar la licencia de Xcode

    sudo xcodebuild -license

  4. 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Ó!