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


Estoy empezando con Ruby (y rails). Hice la configuración de acuerdo con http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gemas, 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 rails 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 otros 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, ya que tengo varias otras bases de datos allí ya para otros proyectos que no sean 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 manera de decirle a Rails cómo localizarlo?

Author: The Unfun Cat, 2012-05-11

22 answers

La solución es bastante fácil; Agregue la ruta de la biblioteca en su~/.bash_profile o ~/.archivo de perfil:

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 (este trabajo para mí):

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

Hay muchos blogs con install_name_tool, que no funcionarán para mí 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
 296
Author: atejeda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-23 16:44:55

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 desactivar la seguridad, así que simplemente puse el enlace en /usr/local/lib en su lugar.

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

El servidor Rails está funcionando bien de nuevo.

 120
Author: TinMonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-30 21:20:20

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

En mi caso (El Capitan, mysql instalado vía homebrew), un brew update && brew upgrade causó que el paquete mysql se actualizara a 5.7.10 (de 5.6.x).

La actualización causó que libmysqlclient.18.dylib fuera reemplazado por libmysqlclient.20.dylib, pero la gema mysql2 todavía 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 (vea mi propia respuesta a esto, por ejemplo)

 40
Author: Giuseppe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:30
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.

 25
Author: Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-23 16:45:34
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Funcionó para mí. Todos los similares no lo hicieron.

 16
Author: Greg Benner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-23 16:45:12

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
 8
Author: arjunswaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-10 09:50:53

Me encontré con este problema después de una eliminación completa y luego 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 gema mysql2 solucionó 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]

 8
Author: sealocal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-24 20:52:24

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
 6
Author: Abhishek Pande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 20:13:58

Confirmo que el parche de Abhishek hace trabajo.

También funciona para Yosemite.

Nota: en lugar de enlazar a una versión particular de mysql, utilice el hecho mysql ya construido symlink:

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

Esta solución funciona para Xcode y C API.

 4
Author: ingconti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-15 20:02:51

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 así :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
 2
Author: Fraide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-31 13:44:51

Esto funciona para mí:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
 2
Author: Son,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-12 20:53:55

Estoy usando Rails REE (2.3.4) para un sistema heredado que tenemos. Después de actualizar a El Capitan, ejecutar script / console activó un error y mi aplicación ya no se iniciaría (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)


A partir de este mismo hilo, arriba, determiné que necesitaba emitir este comando en 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: Operation not permitted"(en inglés). Nunca antes había visto ese error.

Después de un poco de excavación, encontré este artículo: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html y siguió las instrucciones para desactivar SIP (la nueva Protección de Integridad del Sistema de El Capitán). Después de apagar SIP, y después de reiniciar, el comando ln funcionó bien. Luego apagué el sorbo. Ahora todo está bien. Mi aplicación se ejecuta de nuevo usando pow y no hay error ejecutando script / consola. Espero que esto te ayude.

 1
Author: GeezerGeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-09 15:03:50

En Mac Sierra si usa Homebrew, haga:

sudo ln -s /usr/local/Cellar/[email protected]/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
 1
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 11:17:58
gem uninstall -aIx

Y

bundle install

Funcionó para mí.

 1
Author: atomiccoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-29 21:29:31

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

brew link mysql56 --force
 1
Author: tagaism,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-14 15:27:30

Use esto desde su línea de comandos:

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 pocos ordenadores con maverick siempre funciona

 0
Author: toxic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-18 09:36:07

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

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
 0
Author: noelvictorino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-07 09:51:51

Mi problema con la carga de ese archivo bundle fue un enlace simbólico incorrecto. Así que revisa el enlace y reemplázalo por uno nuevo si es necesario. Todo cayó en su lugar en ese momento. No estoy seguro de cómo sucedió, pero lo hizo. La primera vez que ocurrió un error de sintaxis así.

 0
Author: Rich_F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-18 16:10:06

Estaba trabajando con el comando rails g model y obtuve este error:

Library not loaded: libmysqlclient.18.dylib

He intentado 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 obtuve el mismo error, así que simplemente ejecuté este comando en el terminal y se arregló correctamente.

$ 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!

 0
Author: Alex Ventura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-30 20:24:31

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 funciona para mí: 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
 0
Author: Binh Dang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-01 16:56:17

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

Reemplaza las rutas de mysql y gems para que se ajusten a tu sistema.

 0
Author: Aleksandar Pavić,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-27 17:10:13

Después de mucho googlear y probar 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 Version 15.6.0: Jue Jun 23 18: 25: 34 PDT 2016; XXX:xnu-3248.60.10~1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19

 0
Author: Redcloud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-28 15:12:50