Error al intentar instalar la aplicación con mysql2 gem

84

Estoy intentando instalar una aplicación de código abierto rails 3.2.21 que usa la mysql2gema, pero cuando intento ejecutar el bundlecomando, aparece el siguiente error:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    /Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/5.6.25/lib
-----
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

Intenté desinstalar todas las versiones mysqlque instalé a través de Homebrew y reinstalarlas, así:

brew uninstall --force mysql && brew install mysql

Luego corriendo:

sudo gem install mysql2

Como lo sugieren una serie de preguntas similares formuladas aquí, pero aún así, el resultado es el mismo error que el anterior.

¿Alguien podría ofrecer orientación sobre cómo poner esto en marcha?

zenvelope
fuente
intente ejecutar "brew doctor" y compruebe si hay algún error. Si es así, siga las instrucciones y vuelva a intentarlo.
michniewicz
¿Has instalado las dependencias de gem? github.com/brianmario/mysql2#general-instructions
lcguida
@ValAsensio, no estoy de acuerdo contigo en eso, creo que siempre deberías intentar usar tu base de datos de producción en desarrollo, si es posible. Nunca uso sqlite en el desarrollo, ni tampoco nadie con quien trabajo.
niels
@niels. Si. Estoy de acuerdo con esto "Creo que siempre deberías intentar usar tu base de datos de producción en desarrollo". Este antiguo comentario mío fue inútil. Lo borré.
Elvn

Respuestas:

54

El registro de errores dice:

ld: library not found for -lssl

Entonces, necesitas instalar libssl:

brew install openssl

Como se señaló en los comentarios, es posible que sea necesario exportar la ruta a la biblioteca.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Aleksei Matiushkin
fuente
27
Eso no fue suficiente, hay que exportarlo después de esta manera:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Him
export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Funciona para mí después de un largo intento. ¡¡Gracias!!
Abhi
161

Para cualquiera que siga experimentando el problema:

Cuando instale openssl a través de brew, debería recibir el siguiente mensaje:

Apple ha desaprobado el uso de OpenSSL en favor de sus propias bibliotecas TLS y cripto

Generalmente, esto no tiene consecuencias para usted. Si crea su propio software y requiere esta fórmula, deberá agregar a sus variables de compilación:

LDFLAGS: -L / usr / local / opt / openssl / lib
CPPFLAGS: -I / usr / local / opt / openssl / include
PKG_CONFIG_PATH: / usr / local / opt / openssl / lib / pkgconfig

Puede configurar estos indicadores de compilación (para la aplicación local) ejecutando lo siguiente:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

Esto funcionó para mí.

Consulte la documentación del paquete para obtener más información.

Alessandro Berardi
fuente
79
Si solo desea usar gem install, lo siguiente funciona: gem install mysql2 -v '0.3.21' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
niels
^^^ @niels esa debería ser la respuesta ... Alessandro's no funciona en Sierra ("Advertencia: Negarse a vincular: abrir ssl ..." -> algo que ver con el sistema obsoleto de openssl)
el12
2
La solución de @ the12 niels es para gem install, la mía es para bundle install. ¿Qué problema está experimentando exactamente? ¿Puede publicar el error? La solución que publiqué todavía me funciona.
Alessandro Berardi
1
Empecé intentando conseguir bundle installun repositorio que depende de mysql. La solución de @AlessandroBerardi no funcionó para mí; @niels 'lo hizo. : /
vergenzt
3
--with-cppflags parece fallar en el último OSX. Creo que se puede omitir. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay
36

La solución para mí fue instalar Xcode Command Line Tools.

Recientemente actualicé Xcode a través de la Mac App Store, y cada vez que lo hago, descubro que tengo que reinstalar las herramientas de línea de comandos nuevamente.

xcode-select --install
Allen
fuente
34

Prueba esto:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(Actualice la versión según corresponda)

estereodenis
fuente
1
Dado que no se encontró la biblioteca SSL, este es el enfoque correcto y funcionó bien para mí.
TehJabbit
2
Primero instalar y brew install opensslluego gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include funcionó para mí, ¡Gracias!
Touseef Murtaza
1
@TouseefMurtaza, tu respuesta me funcionó, ¡gracias!
Jared
👋 Querido yo futuro. Ahora que ha leído esta respuesta dos veces. ¡Esto está resuelto para tu situación! Ahora ve y cambia tu tiempo por código y tu código por dinero.
DaveWoodall.com
28

Basado en la solución aquí

brew install openssl

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

resuelve el problema.

Gilg él
fuente
1
el exportrealmente ayuda. incluso con openssl existente, falta la ruta.
Yakob Ubaidi
10

Gracias @mudasobwa por señalarme en la dirección correcta. Resulta que el error fue causado por un archivo openssl desvinculado, por lo que ejecuta:

brew reinstall openssl && brew link openssl --force 

Resuelve el problema. Encontré la solución aquí: OpenSSL, RVM, Brew, error conflictivo

zenvelope
fuente
3

La combinación de comandos me lo resolvió. Estoy en Mojave.

brew reinstall openssl && brew link openssl --force

y entonces

gem install mysql2 -v '0.4.10' -- \
  --with-ldflags=-L/usr/local/opt/openssl/lib \
  --with-cppflags=-I/usr/local/opt/openssl/include
Haseeb Zulfiqar
fuente
2

Después de la actualización de Homebrew ([email protected]) hay una nueva ruta para las bibliotecas, por lo que puede usar:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

Se arreglará ld: library not found for -lssl error

Alexey Morozov
fuente
1

Parece que echas de menos los archivos principales necesarios para construir mysql2gemas

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev no es obligatorio, pero instálelo ya que es la base de datos de rieles predeterminada.

Emad Saeed
fuente
-1

Encontré que tenía que usar --with-opt-dir=/usr/local/opt .

Específicamente, agregué lo siguiente a mi ~/.bundle/configarchivo:

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Brian J. Fox
fuente