[Post acortado y actualizado con una respuesta.]
Ruby 1.9.3 compilado en OS X 10.7.4 con MacPorts se bloquea en mi Rieles de aplicaciones cuando se utiliza SSL de http.rb, por ejemplo, a la hora de autenticar a Facebook:
(facebook) Callback phase initiated.
/opt/local/lib/ruby1.9/1.9.1/net/http.rb:799: [BUG] Segmentation fault
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11]
Nota: Esta es una solución real para el problema de violación de segmento, no una oportunidad-mi favorito-alternativa-ruby-installer-du-jour solución. Yo no quiero modificar la mitad de mi sistema en la mitad de una docena de devel y máquinas de producción mediante la instalación de RVM, rbenv tendremos, Homebrew o cualquier otra cosa. También quiero mostrar cómo me encontré con el problema, ya que esto puede ocurrir con cualquier Ruby instalador.
Algunas cosas que he notado por ensayo y error:
- Compilación de OpenSSL y Ruby usando
--with-openssl-dir=/usr
o..=/opt/local
no ayuda. - Después de volver a compilar Ruby 1.9 uso de /opt/local como openssl-dir, otros que en muchos otros puestos en la web, yo podría correr SSL basado conecta desde la línea de comandos bien. Sin embargo, SSL se conecta en mi Rieles de proyectos seguían estrellándose.
- El accidente se traza que OS X guarda en
/Library/Logs/CrashReporter
contenían restos delibssl.1.0.0.dylib
(MacPorts) ylibssl.0.9.8.dylib
(OS X). Pero todos mis MacPorts archivos estaban vinculados en contra de OpenSSL 1.0.x. (find /opt/local -iname "*.dylib" | xargs otool -L
es tu amigo!) - Esto ocurrió solamente en mis aplicaciones en vivo. No en la virgen de nuevas aplicaciones.
- Esto ocurrió sólo cuando el uso de la
pg
Postgres joya que contiene extensiones nativas.
Buscando en la PG joya del paquete:
$ otool -L /opt/local/lib/ruby1.9/gems/1.9.1/gems/pg-0.14.1/lib/pg_ext.bundle
/opt/local/lib/ruby1.9/gems/1.9.1/gems/pg-0.14.1/lib/pg_ext.bundle:
/opt/local/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
/usr/lib/libpq.5.dylib (compatibility version 5.0.0, current version 5.3.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
El PG gema no enlace con MacPorts s libpq
! Y:
Jens ~/Sites/testapp$ otool -L /usr/lib/libpq.5.dylib
/usr/lib/libpq.5.dylib:
/usr/lib/libpq.5.dylib (compatibility version 5.0.0, current version 5.3.0)
/usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 44.0.0)
/usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 44.0.0)
(...)
... OSX del libpq (por supuesto!) enlaces en contra de OS X libssl
y libcrypto
. Bingo!
Solución: RTFM! PG README-OS_X dice:
Si necesita una instalación personalizada de PostgreSQL, usted debe asegurarse de que usted compile contra la misma versión de OpenSSL como OpenSSL extensión de Ruby que vas a utilizar, o compilarlo sin soporte SSL. Si no lo haces, es probable que vea segfaults ...
Así:
sudo gem install pg -- --with-pg-config=/opt/local/lib/postgresql83/bin/pg_config
Bingo, problema resuelto.
$ bundle exec rails runner "require 'net/http'; require 'net/https'; h=Net::HTTP.new('gmail.com', 443); h.use_ssl=true; puts h.get('/');"
#<Net::HTTPMovedPermanently:0x007fe48d5590a0>
Si su paquete no hace referencia a la actual, pg joya versión, entonces usted necesitará especificar la versión al volver a instalar, por ejemplo,
gem install pg -v 0.13.2 -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config