Biblioteca no cargada: error libmysqlclient.16.dylib al intentar ejecutar 'rails server' en OS X 10.6 con mysql2 gem

206

He estado luchando con esto por algún tiempo.

He instalado Rails 3, gem, mysql en mi máquina Snow Leopard. Todo iba bien hasta que creé mi primer proyecto e intenté ejecutar

rails server

Al ejecutar esto obtengo:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Por lo que puedo decir, el problema es con la gema mysql2. MySQL parece estar funcionando bien y mi Gemfile hace referencia a mysql2, mi archivo database.yml también parece estar bien.

El error menciona

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Y todavía

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle está ahí?

Si uso la antigua joya mysql, WEBrick arranca bien. Pero eso no es ideal, ¿verdad?

¡He intentado todo lo que Google me puede dar! Cualquier ayuda muy apreciada.

Jonty Brook
fuente

Respuestas:

393

Nunca pude conseguir que ninguna de estas respuestas funcionara para mí, pero este es el comando que usé para que funcionara para mí. De esta manera, no necesita usar install_name_tool cada vez que actualice su mysql

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
sin sangre
fuente
11
Esa es la forma más simple y correcta de resolver ese problema.
Voldy
2
gracias por esto. la respuesta marcada arriba solo funcionó para un sitio, pero esto funcionó permanentemente. Es mo 'betta.
Fregas
12
Para aquellos que tienen curiosidad por lo que está sucediendo, este comando crea un enlace simbólico desde la segunda ubicación a la primera. Cuando la gema busca la biblioteca del cliente MySQL debajo /usr/lib, ese enlace se resolverá en la ubicación donde está realmente instalado. En OS X, generalmente está debajo /usr/local/mysql/lib, que es donde se vincula este comando. Si su lib está instalada en una ubicación diferente, deberá ajustar este comando. Escriba locate libmysqlclient.18.dyliby sustituya el resultado por el primer argumento posterior -s.
Siobhán
1
@Sean D., cuando ejecuto localizar libmysqlclient.18.dylib obtengo este resultado WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.¿qué está mal?
GiH
1
@GiH Solo necesita ejecutar el comando que le indica ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Eso iniciará el proceso de indexar su disco duro, lo que hará que el locatecomando funcione en el futuro. Sin embargo, en la mayoría de los casos, creo que no necesitará hacer eso, y solo puede usar el comando que luvlss proporcionó tal cual.
Siobhán
93

¡He resuelto esto, eventualmente!

Reinstalé Ruby and Rails en RVM. Estoy usando Ruby versión 1.9.2-p136.

Después de reinstalar bajo rvm, este error aún estaba presente.

Al final, el comando mágico que lo resolvió fue:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

¡Espero que esto ayude a alguien más!

Jonty Brook
fuente
1
Esto ha restablecido de alguna manera los privilegios de mysql y ahora no puedo iniciar sesión ... incluso después de restablecer la contraseña utilizando un archivo como se describe en los documentos de mysql.
Coderama
2
Gracias, esto lo hizo por mí. Y para otros con el mismo problema, si usa rvm, omita el sudo, de lo contrario, los permisos probablemente cambiarán.
DanneManne
2
El comando mágico funciona incluso si no está utilizando RVM: simplemente cambie el último argumento para señalar mysql2-0.2.6/lib/mysql2/mysql2.bundledónde estén instaladas sus gemas.
Tobias Cohen
2
Muchas gracias. ¿Cómo diablos resolviste esto?
Derek
77
¡Gracias! Necesitaba un comando ligeramente diferente para mi Mac OS X Lion con RVM 1.6.4 con Ruby 1.9.2-p180, mysql2 gem 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Randy Eppinger el
40

Para mí esto fue solo porque había actualizado mysql pero no había actualizado la gema mysql2: una reinstalación de la gema lo solucionará ...

gem pristine mysql2

Luke
fuente
Esta debería ser la respuesta seleccionada.
El Guapo
26

Tengo el mismo problema. Parece que no puede encontrar la biblioteca libmysqlclient. Una solución temporal que me ha funcionado es la siguiente:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

No estoy seguro de dónde está especificando la configuración la ruta de carga o lo que está configurado, pero mi instalación de mysql no parecía estar en ella. Publicaré nuevamente si encuentro una solución más permanente.

Editar: en realidad, esta solución parece abordar el problema con mayor precisión.

Ogapo
fuente
24

Agregue lo siguiente a su ~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Esto funciono para mi

DV Dasari
fuente
Sí, funciona en 1.9.3-p448. Es una pena que no sea una respuesta aceptada.
andreimarinescu
17

En la actualización de OSX El Capitan cuando haces esto:

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

arroja un error como

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Entonces, para evitar esto, lo que puede hacer es localizar primero libmysqlclient.18.dylibusando el comando

User$ locate libmysqlclient.18.dylib

En mi caso regresó /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Entonces, en lugar de usr/lib/crear un enlace simbólico para que le usr/local/lib/guste esto:

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

Más detalles: https://forums.developer.apple.com/thread/7935

Sony Mathew
fuente
1
En El Capitán para mí, todo lo que necesité fue tu última línea:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Me alegro de que haya ayudado a alguien. : D
Sony Mathew
Esta es la respuesta CORRECTA para elcapitan, su enlace de destino debe estar en la /usr/local/libcarpeta
Arnold Roa
13

Las siguientes líneas me funcionan. Estoy usando mac 10.7.2.

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

S. Rasel
fuente
1
Este es el que solucionó mi problema. ¡Gracias!
Justin Bozonier
11

Acabo de encontrarme con este problema. Todo lo que tuve que hacer es desinstalar mysql2 gem y reinstalarlo. Espero que esto funcione para otras personas

Anh Pham
fuente
1
En mi máquina, ejecutando Mavericks, eliminé todas las versiones de la gema mysql2 con la desinstalación de gemas mysql2 y respondí All versionsen el indicador. Luego ejecuté brew upgrade mysql y luego gem install mysql2.
Martin Streicher
4

Así es como funcionó para mí:

Ejecuté el siguiente comando
Ejecuté sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

Mis entornos:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, para osx10.6 (i386) usando readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (revisión 2011-02-18 30909) [x86_64-darwin10.7.0]

Espero que esto ayude a alguien.

DV Dasari
fuente
3

Gracias Ogapo! Exportar ese alias funcionó para mí, y luego seguí el enlace, y en mi caso el mysql2.bundle estaba en /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle so Ajusté install_name_tool para modificar ese paquete en lugar de uno en ~ / .rvm y conseguí que funcionara como debería hacerse.

Y ahora:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
tobinjim
fuente
3

hola me funcionó desde el enlace recomendado de Fredy Andersen

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

solo tuve que cambiar a mi versión de mysql, en el comando, gracias

manuelBetancurt
fuente
3

Resolví este problema eliminando mi conjunto de gemas para mi proyecto actual y recreándolo y volviendo a ejecutar la instalación del paquete. Creo que lo causé al instalar una versión más nueva de mysql.

Ryan
fuente
3

Tuve este problema cuando trabajaba con Django, brewsolía brewinstalar muchos de mis programas de código abierto y tenía que hacer lo siguiente desde la instalación mysql:

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

¡Asegúrese de reemplazar con su versión de las bibliotecas!

Addiction2Code
fuente
3

bundle install mysql --forceme ayudó. Reinstaló las dependencias de las que desapareció como resultado brew uninstall mysql.

Aram
fuente
Unknown switches '--force'
Arnold Roa
2

Jonty, yo también estoy luchando con esto.

Creo que hay una pista aquí:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Observe que la ruta al dylib es, ¿eh, bastante corta?

Estoy tratando de averiguar dónde están las instrucciones de instalación de la gema fuera del camino dylib, pero es lento ya que nunca he construido una gema.

¡Publicaré más si encuentro más!

tobinjim
fuente
2

He tenido este mismo problema hace unos días. Finalmente logré resolverlo. No estoy muy seguro de cómo, pero te diré lo que hice de todos modos. Quizás te ayude.

Comencé descargando RVM. Si aún no lo está utilizando, le recomiendo que lo haga. Básicamente crea un sandbox para una nueva instalación separada de Ruby, RoR y RubyGems. De hecho, puede tener varias instalaciones simultáneamente y cambiar instantáneamente entre sí. Funciona a las mil maravillas.

¿Por qué es útil esto? Porque no deberías meterte con la instalación predeterminada de Ruby en OS X. El sistema depende de ello. Es mejor dejar sola la instalación predeterminada de Ruby y RoR y crear una nueva usando RVM que pueda usar para su propio desarrollo.

Una vez que creé mi instalación separada de Ruby, acabo de instalar RoR, RubyGems y mysql, y funcionó. Para conocer los pasos exactos que tomé, vea mi pregunta: Instalar Rails, MySQL, etc. todo sale mal

De nuevo: no sé con certeza que esto resolverá su problema. Pero ciertamente me sirvió, y en cualquier caso usar RVM es muy recomendable.

Rits
fuente
2

Todavía encontré que con las soluciones anteriores, no funcionó (por ejemplo) con el complemento Rails para TextMate. Recibí un error similar (al recuperar el esquema de la base de datos).

Entonces, lo que hizo es abrir la terminal:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Reemplazar mysql-5.5.8-osx10.6-x86_64 con su propia ruta (o mysql).

Esto hace un enlace de símbolo a la biblioteca, ahora rails se ejecuta desde la línea de comandos, así como los complementos de TextMate como ruby-on-rails-tmbundle .

Para ser claros: esto también corrige el error que obtienes al iniciar el servidor de rails.

Roger
fuente
2

Esto suele suceder cuando actualiza mysql. La gema mysql2 instalada que se creó en las antiguas bibliotecas mysql no puede funcionar con las nuevas bibliotecas. Solo necesito reinstalarlo.

Desinstalar mysql2 con gem uninstall mysql2. Luego instálalo congem install mysql2

longkt90
fuente
1

Lo resolví creando un archivo .rvmrc en mi carpeta de proyecto que contiene:

rvm use <yourrubie>

luego ingresando la ruta de mi proyecto

cd ~/myprojectpath

entonces corro

bundle install
Tomasz Mazur
fuente
1

Mi versión del comando de luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Pasajero 5.0.21

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

Si está probando muchos enlaces diferentes, como lo hice, haga una limpieza con:

sudo unlink /usr/lib/libmysqlclient.18.dylib

AlexJ
fuente
1

Abra una Terminal y ejecute lo siguiente:

export PATH=$PATH:/usr/local/mysql/bin

Deberia de funcionar.

Slipstream
fuente
1
Esto hizo el trabajo, gracias! Tuve problemas para ejecutar Django en Visual Studio Code. Sigue obteniendo el error si instalé mysqlclient en virtualenv.
Irshu
0

Si está utilizando OSX y ha instalado mysql utilizando brew, puede:

brew link mysql

Si tiene problemas con la versión (tenía mysql 5.7 ejecutándose mientras mi gema requería 5.6.25), puede

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
fuente
0

Para mí tuve que desinstalar manualmente mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Dillawes0me
fuente