ruby - gem install pg no funciona en OSX Lion
postgresql rubygems (13)
¡Finalmente encontré la causa del problema! Aunque todavía no estoy seguro de cómo surgió este problema.
Mire los contenidos del archivo mkmf.log que se crea cuando falla mi comando de instalación (vea mi publicación original). Registra un intento de ejecutar el siguiente comando
/usr/bin/gcc-4.2 ...and so on...
No hay /usr/bin/gcc-4.2
en mi sistema. Hay un gcc
, que está simbólicamente vinculado a llvm-gcc-4.2
. Mi solución fue crear otro enlace simbólico.
sudo ln -s llvm-gcc-4.2 gcc-4.2
Después de hacer este enlace, mi comando gem install pg
funcionó sin problemas.
Encontré la solución a este problema en el blog de Frozen Canuck en la publicación Error Error al instalar Ruby Gem con C Extension . Especula que el problema puede ser causado por versiones contradictorias de XCode. cualquiera que sea la causa, mi eterno agradecimiento!
Hay variaciones de esta pregunta que rebotan alrededor de SO, pero ninguna de ellas parece tener una respuesta que resuelva mi problema.
Estoy ejecutando OSX Lion (10.7.3). El último XCode está instalado.
He instalado Postgres usando el paquete Postgres.app de postgresapp.com.
Pero cuando intento instalar la gema pg, obtengo un error:
$ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Using config values from /Applications/Postgres.app/Contents/MacOS/bin/pg_config
checking for libpq-fe.h... *** 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
--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=/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/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
/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do'': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:970:in `block in find_header''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:280:in `postpone''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for''
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:969:in `find_header''
from extconf.rb:40:in `<main>''
Gem files will remain installed in /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2 for inspection.
Results logged to /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2/ext/gem_make.out
El resultado del comando /Applications/Postgres.app/Contents/MacOS/bin/pg_config
es:
$ /Applications/Postgres.app/Contents/MacOS/bin/pg_config
BINDIR = /Applications/Postgres.app/Contents/MacOS/bin
DOCDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
HTMLDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
INCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
PKGINCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
INCLUDEDIR-SERVER = /Applications/Postgres.app/Contents/MacOS/include/server
LIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
PKGLIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
LOCALEDIR = /Applications/Postgres.app/Contents/MacOS/share/locale
MANDIR = /Applications/Postgres.app/Contents/MacOS/share/man
SHAREDIR = /Applications/Postgres.app/Contents/MacOS/share
SYSCONFDIR = /Applications/Postgres.app/Contents/MacOS/etc
PGXS = /Applications/Postgres.app/Contents/MacOS/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = ''--prefix=/Users/mattt/Code/heroku/Postgres/Postgres/Vendor/postgres'' ''--enable-thread-safety'' ''--with-openssl'' ''--with-gssapi'' ''--with-bonjour'' ''--with-krb5'' ''--with-libxml'' ''--with-libxslt'' ''--with-ossp-uuid'' ''--with-perl'' ''--with-python''
CC = gcc
CPPFLAGS = -I/usr/include/libxml2
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL =
LDFLAGS = -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lm
VERSION = PostgreSQL 9.1.3
Todos esos ajustes parecen ser correctos, a excepción de la variable CONFIGURAR (que parece referirse a otra computadora --no tengo ningún usuario llamado mattt).
El contenido del archivo mkmf.log es
"/usr/bin/gcc-4.2 -o conftest -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/x86_64-darwin10.8.0 -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/backward -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1 -I. -I/Users/disaacs/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/Applications/Postgres.app/Contents/MacOS/include -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -fno-common -pipe conftest.c -L. -L/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib -L/Users/disaacs/.rvm/usr/lib -L. -L/usr/local/lib -L/Applications/Postgres.app/Contents/MacOS/lib -lruby.1.9.1 -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() {return 0;}
/* end */
Cualquier sugerencia sera apreciada.
He mirado el archivo extconf.rb, y después de un poco de depuración he encontrado que es una llamada a
find_header (''libpq-fe.h'')
eso está fallando No porque libpq-fe.h no esté allí, sino porque el método find_header
está fallando. Intenté ejecutar find_header usando irb, y obtuve el mismo error:
$ irb
1.9.3-p125 :001 > require ''mkmf''
=> true
1.9.3-p125 :002 > find_header ''libpq-fe.h''
checking for libpq-fe.h... RuntimeError: The compiler failed to generate an executable file.
You have to install development tools first.
EDITAR:
Descubrí que mi computadora debe estar aún más bloqueada de lo que pensaba. Estaba haciendo la instalación de paquetes para otro proyecto, y obtuve una falla muy similar al instalar la gema sqlite3.
checking for sqlite3.h... *** extconf.rb failed ***
Nunca he tenido problemas con la gema sqlite3 en el pasado.
Después de una actualización de Mavericks ...
Vuelva a instalar su versión de rubí.
rvm uninstall 1.9.2-p320
entonces
rvm install 1.9.2-p320
o cualquier versión de rubí que tengas.
En OS X Mavericks
sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2
trabajos.
En lugar de actualizar el propio RVM ( https://.com/a/10430742/2807795 ), como se indica más arriba, fue la reinstalación de Ruby 2.0.0-p247 la que funcionó, después de probar todos los pasos anteriores sin éxito.
rvm get head
rvm install 2.0.0
Estoy en Mountain Lion, y la respuesta aceptada de Dave Isaacs funcionó para mí. También tuve que hacer
sudo ln -s llvm-g++-4.2 g++-4.2
Gracias a este chico: http://www.computersnyou.com/2025/
En Mavericks usando: xcode-select --install
(suponiendo que haya instalado Xcode desde la tienda de aplicaciones) funciona.
Instalar xcode desde la tienda de aplicaciones no es suficiente. También necesitarás las herramientas de línea de comando de xcode. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html
Después de instalar xcode desde la tienda de aplicaciones, abra xcode. Ir a Xcode-> Abrir herramienta de desarrollador-> Más herramientas de desarrollo Descargar e instalar las últimas herramientas de línea de comandos.
Abra una ventana de terminal y ejecute: sudo gem install pg
Problema similar en Mavericks 10.9 - pero fue causado por no haber aceptado el acuerdo de licencia de Xcode. Blech.
Ejecute sudo xcodebuild
y acepte la basura. Todo funciona como se espera
Si la salida incluye:
/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do'': /
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
entonces realmente hay algo mal con su entorno de compilación. Especialmente cuando la falla es la primera prueba que ejecuta extconf.rb
.
Si tiene instalado XCode, ¿quizás no tenga instalado el componente de herramientas de línea de comandos de XCode? https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html fueron https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html , por lo que debe instalarlos por separado.
También encontré este problema, para mí la respuesta fue actualizar RVM de todas las cosas.
rvm get head
rvm install 1.9.2
Tuve un problema similar. Tras una respuesta de bobfet1 para un problema similar, pude obtener la gema instalada de la siguiente manera:
sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Yo también, estoy en Mountain Lion, además del "sudo ln -s /usr/bin/{llvm-,}gcc-4.2" sugerido por @grilix, necesitaba hacer:
sudo ln -s /usr/bin/{llvm-,}g++-4.2
$ gem install pg
Si eso falló:
$ sudo gem install pg
Entonces, si eso falló:
$ sudo find / -name “pg_config”
Después de encontrar la ubicación de pg_config
, ejecútelo para finalmente instalarlo:
$ sudo gem install pg --with-pg-config=/usr/local/Cellar/postgresql/9.5.1/bin/pg_config
Por supuesto, querrás cambiar la ruta a donde encuentres pg_config
.
Luego, revisa tus gemas instaladas con la gem list
, y debería mostrar algo como esto:
Más información se puede encontrar en mi guía .