rails + MySQL en OSX: biblioteca no cargada: libmysqlclient.18.dylib

119

Recién estoy comenzando con Ruby (y rieles). Hice la configuración de acuerdo con http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, usando rvm. Tengo todo funcionando bien con sqlite.

Ahora me gustaría intentar convertir cosas a MySQL, ya que eso es con lo que hago la mayor parte de mi desarrollo. En mi Gemfile he reemplazado sqlite con mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

Pero cuando intento crear la base de datos para rieles en MySQL, obtengo:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

He visto otras publicaciones recomendando reinstalar MySQL a través de homebrew (la mía se instaló a través de un DMG descargable), pero preferiría no hacerlo porque ya tengo varias otras bases de datos para otros proyectos que no son de Ruby.

De hecho, tengo el archivo que Rails está buscando; está instalado en /usr/local/mysql/lib/libmysqlclient.18.dylib. ¿Cuál es la mejor forma de decirle a Rails cómo localizarlo?

George Armhold
fuente
¿Podría ser esto un duplicado de esto? stackoverflow.com/questions/4546698/…
gmile
En efecto. ¿No puedo borrar mi propia pregunta? Votó para cerrar como dup.
George Armhold

Respuestas:

313

La solución es bastante sencilla; Agregue la ruta de la biblioteca en su archivo ~ / .bash_profile o ~ / .profile:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Si todavía no funciona (esto funciona para mí):

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Hay muchos blogs install_name_toolque no me funcionan porque estoy en OSX Lion:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search
atejeda
fuente
16
El enlace simbólico funcionó para mí (después de actualizar a Mountain Lion). ¡Gracias!
siannopollo
5
Symlink lo hace, especialmente para casos como ejecutar rieles desde RubyMine donde .bash_profilerealmente no se aplica.
maksimov
2
Agregué su DYLD_LIBRARY_PATH a .bash_profile, pero también tuve que desinstalar la gema 'mysql2' y luego reinstalarla. así como: 'joya de desinstalación mysql2 && joya instalar mysql2'
Brendan
73
Para aquellos que vienen aquí para 10.11, ya no pueden usar usr/libun enlace simbólico, pero un enlace simbólico usr/local/libfuncionará:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons
2
@JonathanSimmons - Me acabas de salvar de arrancarme el resto del cabello. La respuesta del enlace simbólico original no funciona en OS X 10.11.5, simplemente terminas con el error "ln: /usr/lib/libmysqlclient.18.dylib: Operación no permitida" - Todo está funcionando ahora y finalmente puedo iniciar mi trabajo por el día ... Gracias!
Colin Adams
125

En El Capitán tengo ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

En El Capitán /usr/lib/ahora tiene una bandera restringida y no se puede escribir sin deshabilitar la seguridad, así que simplemente puse el enlace en su /usr/local/liblugar.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

El servidor de Rails está funcionando bien nuevamente.

TinMonkey
fuente
2
No necesitaba toda la respuesta de Alex. Un enlace simbólico funcionó.
gitb
Hice esto y obtuve: "connect ': No se puede conectar al servidor MySQL local a través del socket' /tmp/mysql.sock '(2) (Mysql2 :: Error)"
Josh Hunter
1
@JoshHunter Creo que este es un tema aparte. Hay un hilo aquí stackoverflow.com/questions/18449050/… También podría ser que el servidor MySQL no se está ejecutando.
TinMonkey
sí, el servidor no se estaba ejecutando ... esto lo solucionó. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter
62

Si bien el título de esta pregunta describe con precisión el problema que encontré, las circunstancias son diferentes de las descritas en las respuestas anteriores, y también lo fue la solución.

En mi caso (El Capitan, mysql instalado a través de homebrew), brew update && brew upgradeprovocó que el paquete mysql se actualizara a 5.7.10 (desde 5.6.x).

La actualización causó libmysqlclient.18.dylibque se reemplazara libmysqlclient.20.dylib, pero la mysql2gema aún dependía de la primera.

Para solucionar el problema que hice: gem uninstall mysql2 && gem install mysql2

Tenga en cuenta que pueden ocurrir problemas similares con diferentes bibliotecas administradas por homebrew ( consulte mi propia respuesta a esto, por ejemplo )

Giuseppe
fuente
Excelente ! Actualicé mi mysql a 5.7 ... enfrenté este problema ... Hice los siguientes pasos 1. gema desinstalar mysql2> opción seleccionada 3 2. gema instalar mysql2 3. agregué esto al archivo gema del proyecto ---> gema 'mysql2' , '~> 0.3.21' 4. instalación del paquete
Udit Kapahi
10
¡Recomiendo a todos que prueben esto primero! Si funciona, puede evitar desperdiciar su sistema con cualquiera de las otras soluciones. A veces tienes que depender de enlaces simbólicos mágicos, etc., pero hace que tu sistema sea cada vez más frágil. (Si no funciona, no se hace daño y no hay nada que deshacer.)
Tom Wilson
También funcionó para mí. El problema fue que pasé de instalar mysql con homebrew al instalador oficial.
xenetics
1
Para cualquier usuario de Python que llegue aquí, pip uninstall mysqlclienty pip install mysqlclienttambién funcionó.
Peter Dolan
26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Eso funcionó para mí. Instalé MySQL desde un archivo dmg.

Joseph
fuente
Esto funcionó en Mac OS X - Yosemite para mí con MySQL instalado desde el archivo dmg. Gracias Joseph.
racl101
4
Operación no permitida (obviamente con sudo) mi versión SO es El capitan
ignacio chiazzo
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Trabajó para mi. Todos los similares no lo hicieron.

Greg Benner
fuente
Esta es la solución para RubyMine.
Justin
13

Me encontré con este problema después de una eliminación completa y luego una nueva instalación de MySQL. Específicamente:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

Ni siquiera había tocado mi aplicación Rails.

Reinstalar la mysql2gema resolvió este problema.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]

sealocal
fuente
9

Si está utilizando MySQL instalado desde HomeBrew en El Capitan, entonces debe vincularlo de la siguiente manera:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
arjunswaj
fuente
6

Para MySql 5.6 instalado desde DMG en Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Abhishek Pande
fuente
4

Confirmo parche de Abhishek hace el trabajo.

también funciona para Yosemite.

nota: en lugar de vincular a una versión particular de mysql, use el enlace simbólico de hecho mysql ya construido:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

esta solución funciona para Xcode y C API.

ingconti
fuente
3

Para aquellos que están usando brew. Simplemente vincule su versión de mysql con la opción "--force".

brew link mysql56 --force
tagaísmo
fuente
Esta es la forma de vincular el archivo de la biblioteca ... en lugar de usar la opción ln -s. Use brew link [email protected] --force para la versión actualizada
Vahid Kowsari
Gracias. Lo hice brew link [email protected] --force. Funcionó perfectamente.
Aye Mon Chit
2

Para estar seguro de qué enlace simbólico se necesita (depende de la versión de mysql y la versión del sistema operativo):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

y entonces :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Fraide
fuente
2

Esto funciona para mi:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Hijo
fuente
Terminó siendo una variación para mí ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor
1

Estoy usando Rails REE (2.3.4) para un sistema heredado que tenemos. Después de actualizar a El Capitan, ejecutar el script / consola generó un error y mi aplicación ya no se iniciaba (usando pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


Desde este mismo hilo, arriba, determiné que necesitaba emitir este comando en la terminal:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Este comando produjo un error: "ln: /usr/lib/libmysqlclient.18.dylib: Operación no permitida". Nunca antes había visto ese error.

Después de investigar un poco, encontré este artículo: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html y seguí el instrucciones para desactivar SIP (la nueva protección de integridad del sistema de El Capitan). Después de apagar SIP y después de reiniciar, el comando ln funcionó bien. Luego apagué SIP. Ahora todo esta bien. Mi aplicación se ejecuta de nuevo usando pow y sin errores al ejecutar el script / consola. Espero que esto te ayude.

GeezerGeek
fuente
1

En Mac Sierra, si usa Homebrew, haga lo siguiente:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Abhishek
fuente
1
gem uninstall -aIx

y

bundle install

trabajó para mi.

codificador atómico
fuente
1

Esto funcionó para mí. Todo lo que tuve que hacer es desinstalar mysql2 gem e instalarlo nuevamente usando los siguientes comandos

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config
Magesh
fuente
1

Estoy usando Mac OS y me quedé atascado con este error incluso después de desinstalar / eliminar todo mysql y MAMP. Anteriormente, instalé brew install mysqly también usé MAMP. Addling softlink no funcionó para mí.

Solo se resolvió eliminando todos los archivos mysql existentes. y luego instale mysql a través de MySQL desde aquí .

Manish Shrivastava
fuente
0

usa esto desde tu línea de comando:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

probado en pocas computadoras con maverick siempre funciona

tóxico
fuente
0

Si está utilizando Bitnami RubyStack y se encontró con un problema similar. Prueba este

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
noelvictorino
fuente
0

Mi problema con la carga de ese archivo de paquete fue un enlace simbólico incorrecto. Por lo tanto, verifique el enlace y reemplácelo por uno nuevo si es necesario. Todo encajó en ese punto. No estoy seguro de cómo sucedió eso, pero sucedió. Primera vez que ocurre un error de sintaxis así.

Rich_F
fuente
0

Estaba trabajando con el comando del modelo rails g y recibí este error:

Library not loaded: libmysqlclient.18.dylib

Probé esto y funcionó para mí. Estaba usando Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

¡Gracias!

Ahora estoy usando Yosemite 10.10.5 y recibí el mismo error, así que simplemente ejecuté este comando en la terminal y se solucionó con éxito.

$ sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

también puedes probar:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Ambos funcionan bien para mí. ¡Espero que pueda ser útil!

alexventuraio
fuente
0

Tengo este problema "Biblioteca no cargada: libmysqlclient.18.dylib" al importar MySQLdb desde MySQL para python3 :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

La solución me funciona: Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Binh Dang
fuente
@MSU_Bulldog Por supuesto que responde a la pregunta. Incluso proporciona nueva información. El hecho de que una respuesta incluya el error que los trajo aquí no significa que la solución que también brindan no tenga valor.
Artjom B.
0

Lo único que funcionó para mí es:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

Reemplace las rutas de mysql y gems para que se ajusten a su sistema.

Aleksandar Pavić
fuente
0

Después de mucho buscar en Google e intentar todo lo anterior ... lo único que resolvió mi problema fue este comando:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Estoy usando un macbook pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Versión 15.6.0: jueves 23 de junio a las 18:25:34 PDT de 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19

Nube roja
fuente
0

Gracias. Una actualización de Homebrew hizo que mis aplicaciones Rails tuvieran problemas en mi Mac. Reinstalé MySQL (5.7) desde la fuente, luego tuve que hacer esto

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

basado en lo que leí arriba, y en mi Gemfile

gem 'mysql2', '0.5.3'

y en database.yml

adapter: mysql2
Rodmclaughlin
fuente
0

Ya hay muchas respuestas a esta pregunta, especialmente esta https://stackoverflow.com/a/10847618/5515861 . Solo quiero agregar un par de notas. Si usan Mac, no sé cómo instalar MySQL, pero lo primero que debe investigar es dónde se encuentra su instalación de MySQL. Para mí, MySQL se instala usando brewpara la versión 5.7, y la ubicación es /usr/local/opt/[email protected]/, así que agregue lo siguiente a my ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

Espero que solucione sus problemas 😁

abmap
fuente