Bibliothèque non chargée: erreur libmysqlclient.16.dylib lors de la tentative d'exécution de 'rails server' sur OS X 10.6 avec mysql2 gem

206

Je lutte avec cela depuis un certain temps.

J'ai installé Rails 3, gem, mysql sur ma machine Snow Leopard. Tout allait bien jusqu'à ce que je crée mon premier projet et que j'essaie de courir

rails server

En exécutant cela, je reçois:

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$ 

Pour autant que je sache, le problème vient de la gemme mysql2. MySQL semble fonctionner correctement et mon Gemfile fait référence à mysql2, mon fichier database.yml semble également correct.

L'erreur mentionne

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

Et encore

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 là!?

Si j'utilise l'ancien joyau mysql, WEBrick démarre correctement. Mais ce n'est pas idéal, n'est-ce pas?

J'ai essayé tout ce que Google peut me donner! Toute aide très appréciée.

Ruisseau Jonty
la source

Réponses:

393

Je n'ai jamais réussi à faire fonctionner ces réponses pour moi, mais c'est la commande que j'ai utilisée pour que cela fonctionne pour moi. De cette façon, vous n'avez pas besoin d'utiliser install_name_tool chaque fois que vous mettez à jour votre mysql

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
sans blov
la source
11
C'est la manière la plus simple et la meilleure de résoudre ce problème.
Voldy
2
Merci pour cela. la réponse marquée ci-dessus ne fonctionnait que pour un site, mais cela fonctionnait en permanence. Son mo 'betta.
fregas
12
Pour ceux qui sont curieux de ce qui se passe, cette commande établit un lien symbolique du deuxième emplacement au premier. Lorsque le joyau recherche la bibliothèque cliente MySQL sous /usr/lib, ce lien se résoudra à l'emplacement où il est réellement installé. Sous OS X, c'est généralement sous /usr/local/mysql/lib, c'est là que cette commande est liée. Si votre bibliothèque est installée à un emplacement différent, vous devrez modifier cette commande. Tapez locate libmysqlclient.18.dylibet remplacez le résultat par le premier argument après -s.
Siobhán
1
@Sean D., lorsque j'exécute Locate libmysqlclient.18.dylib J'obtiens cette sortie, 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-ce qui ne va pas?
GiH
1
@GiH Il vous suffit d'exécuter la commande qu'il vous indique ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Cela lancera le processus d'indexation de votre disque dur, ce qui fera fonctionner la locatecommande à l'avenir. Dans la plupart des cas, cependant, je pense que vous n'aurez pas besoin de le faire et que vous pouvez simplement utiliser la commande fournie par luvlss en l'état.
Siobhán
93

J'ai résolu cela, finalement!

J'ai réinstallé Ruby and Rails sous RVM. J'utilise la version 1.9.2-p136 de Ruby.

Après la réinstallation sous rvm, cette erreur était toujours présente.

En fin de compte, la commande magique qui l'a résolu était:

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

J'espère que ceci aide quelqu'un d'autre!

Ruisseau Jonty
la source
1
Cela a en quelque sorte réinitialisé les privilèges de mysql et maintenant je ne peux pas me connecter ... même après avoir effectué une réinitialisation du mot de passe en utilisant un fichier comme décrit dans la documentation mysql.
Coderama
2
Merci, ça l'a fait pour moi. Et pour d'autres avec le même problème, si vous utilisez rvm, sautez le sudo, sinon les autorisations changeront probablement.
DanneManne
2
La commande magique fonctionne même si vous n'utilisez pas RVM - changez simplement le dernier argument pour pointer mysql2-0.2.6/lib/mysql2/mysql2.bundlelà où vos gemmes sont installées.
Tobias Cohen
2
Merci beaucoup. Comment diable avez-vous compris cela?
Derek
7
Je vous remercie! J'avais besoin d'une commande légèrement différente pour mon Mac OS X Lion exécutant RVM 1.6.4 avec 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
40

Pour moi, c'était simplement parce que j'avais mis à jour mysql mais que je n'avais pas mis à jour le joyau mysql2 - une réinstallation du joyau le corrigera ...

gem pristine mysql2

Luc
la source
Ce devrait être la réponse choisie.
El Guapo
26

J'ai le même problème. Il semble qu'il ne puisse pas trouver la bibliothèque libmysqlclient. Un correctif temporaire qui a fonctionné pour moi est le suivant:

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

Je ne sais pas où la config spécifie le chemin de chargement ou ce qu'il est réglé mais mon installation mysql ne semble pas y être. Je publierai à nouveau si je trouve une solution plus permanente.

Modifier: En fait, ce correctif semble résoudre plus précisément le problème.

Ogapo
la source
24

Ajoutez ce qui suit à votre ~/.bash_profile:

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

Cela a fonctionné pour moi

DV Dasari
la source
Oui, fonctionne sur 1.9.3-p448. Dommage que ce ne soit pas une réponse acceptée.
andreimarinescu
17

Dans la mise à jour OSX El Capitan lorsque vous effectuez cette opération:

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

il jette une erreur comme

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

Donc, pour éviter cela, vous pouvez d'abord localiser libmysqlclient.18.dylibà l'aide de la commande

User$ locate libmysqlclient.18.dylib

Dans mon cas, il est revenu /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Donc, au lieu de usr/lib/nous allons créer un lien symbolique pour usr/local/lib/aimer ceci:

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

Plus de détails: https://forums.developer.apple.com/thread/7935

Sony Mathew
la source
1
Sur El Capitan pour moi, tout ce qu'il a fallu c'était votre dernière ligne:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Heureux que cela ait aidé quelqu'un. : D
Sony Mathew
Ceci est la bonne réponse pour elcapitan votre lien cible devrait être sur le /usr/local/libdossier
Arnold Roa
13

les lignes suivantes me conviennent. J'utilise mac 10.7.2.

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

S. Rasel
la source
1
Celui-ci est ce qui a résolu mon problème. Merci!
Justin Bozonier
11

Je suis juste tombé sur ce problème. Tout ce que j'avais à faire était de désinstaller mysql2 gem et de le réinstaller. J'espère que cela fonctionne pour d'autres personnes

Anh Pham
la source
1
Sur ma machine, exécutant Mavericks, j'ai supprimé toutes les versions de la gemme mysql2 avec gem uninstall mysql2 et répondant All versionsà l'invite. J'ai ensuite exécuté la mise à niveau de brew mysql puis gem install mysql2.
Martin Streicher
4

Voici comment cela a fonctionné pour moi:

J'ai exécuté la commande ci-dessous
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

Mes environnements:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, pour osx10.6 (i386) en utilisant readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011-02-18 révision 30909) [x86_64-darwin10.7.0]

J'espère que cela aide quelqu'un.

DV Dasari
la source
3

Merci, Ogapo! L'exportation de cet alias a fonctionné pour moi, puis j'ai suivi le lien, et dans mon cas, mysql2.bundle était en place dans /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle so J'ai ajusté l'install_name_tool pour modifier ce bundle plutôt qu'un dans ~ / .rvm et j'ai fait en sorte que cela fonctionne.

Alors maintenant:

   $ 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
la source
3

salut cela a fonctionné pour moi à partir du lien recommandé 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

juste dû changer pour ma version de mysql, dans la commande, merci

manuelBetancurt
la source
3

J'ai résolu ce problème en supprimant mon jeu de gemmes pour mon projet actuel, en le recréant et en réexécutant l'installation du bundle. Je pense que je l'ai causé en installant une nouvelle version de mysql.

Ryan
la source
3

J'ai eu ce problème lorsque je travaillais avec Django, j'utilise brewpour installer beaucoup de mes programmes Open Source et je devais faire ce qui suit depuis que brewj'installais mysql:

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

Assurez-vous de le remplacer par votre version des bibliothèques!

Addiction2Code
la source
3

bundle install mysql --forcem'a aidé. Il a réinstallé les dépendances qui ont disparu à la suite de brew uninstall mysql.

Aram
la source
Unknown switches '--force'
Arnold Roa
2

Jonty, je me bats avec ça aussi.

Je pense qu'il y a un indice ici:

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)

Remarquez que le chemin vers le dylib est, euh, plutôt court?

J'essaie de comprendre où les instructions d'installation de gemmes laissent de côté le chemin de dylib, mais c'est lent car je n'ai jamais construit de gemme moi-même.

Je posterai plus si j'en trouve plus!

tobinjim
la source
2

J'ai eu exactement le même problème il y a quelques jours. J'ai finalement réussi à le résoudre. Je ne sais pas trop comment, mais je vais quand même vous dire ce que j'ai fait. Peut-être que cela vous aidera.

J'ai commencé par télécharger RVM. Si vous ne l'utilisez pas encore, je vous recommande fortement de le faire. Il crée essentiellement un bac à sable pour une nouvelle installation distincte de Ruby, RoR et RubyGems. En fait, vous pouvez avoir plusieurs installations simultanément et passer instantanément les unes aux autres. Il fonctionne comme un charme.

Pourquoi est-ce utile? Parce que vous ne devriez pas jouer avec l'installation par défaut de Ruby dans OS X. Le système en dépend. Il est préférable de laisser seule l'installation par défaut de Ruby et RoR et d'en créer une nouvelle à l'aide de RVM que vous pouvez utiliser pour votre propre développement.

Une fois que j'ai créé mon installation Ruby séparée, je viens d'installer RoR, RubyGems et mysql, et cela a fonctionné. Pour les étapes exactes que j'ai prises, voir ma question: Installation de Rails, MySQL, etc. tout va mal

Encore une fois: je ne suis pas certain que cela résoudra votre problème. Mais cela a certainement fait l'affaire pour moi, et dans tous les cas, l'utilisation de RVM est fortement recommandée.

Rits
la source
2

J'ai toujours trouvé qu'avec les solutions ci-dessus, cela ne fonctionnait pas (par exemple) avec le plugin Rails pour TextMate. J'ai eu une erreur similaire (lors de la récupération du schéma de base de données).

Alors qu'est-ce que c'est, ouvrez le terminal:

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

Remplacez mysql-5.5.8-osx10.6-x86_64 par votre propre chemin (ou mysql).

Cela crée un lien symbolique vers la bibliothèque, maintenant rails s'exécute à partir de la ligne de commande, ainsi que les plug-ins TextMate comme ruby-on-rails-tmbundle .

Pour être clair: cela corrige également l'erreur que vous obtenez lors du démarrage du serveur rails.

Roger
la source
2

Cela se produit généralement lorsque vous mettez à niveau mysql. La gemme mysql2 installée qui a été construite sur les anciennes bibliothèques mysql ne peut pas fonctionner avec les nouvelles bibliothèques. Il suffit de le réinstaller.

Désinstallez mysql2 avec gem uninstall mysql2. Installez-le ensuite avecgem install mysql2

longkt90
la source
1

Je l'ai résolu en créant un fichier .rvmrc dans mon dossier de projet contenant:

rvm use <yourrubie>

puis entrer dans mon chemin de projet

cd ~/myprojectpath

alors je cours

bundle install
Tomasz Mazur
la source
1

Ma version de la commande de luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Passager 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 vous essayez de nombreux liens différents, comme je l'ai fait, nettoyez-les avec:

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

AlexJ
la source
1

Ouvrez un terminal et exécutez ce qui suit:

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

Ça devrait marcher.

Slipstream
la source
1
Cela a fait le travail, merci !!! J'ai eu du mal à faire tourner Django sur Visual Studio Code. Continue à recevoir l'erreur si j'ai installé mysqlclient sur virtualenv.
Irshu
0

Si vous utilisez OSX et avez installé mysql à l'aide de brew, vous pouvez:

brew link mysql

Si vous rencontrez des problèmes avec la version (j'avais mysql 5.7 en cours d'exécution alors que ma gemme nécessitait 5.6.25), vous pouvez

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
la source
0

Pour moi, j'ai dû désinstaller manuellement mysql

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