web-dev-qa-db-fra.com

Bibliothèque non chargée: erreur libmysqlclient.16.dylib lors de la tentative d'exécution du 'serveur Rails' sous OS X 10.6 avec mysql2 gem

Je lutte avec cela depuis un certain temps.

J'ai installé Rails 3, gem, mysql sur ma machine Snow Leopard. Tout se passait bien jusqu'à ce que je crée mon premier projet et que je tente de le lancer 

Rails server

En cours d'exécution, 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$ 

Autant que je sache, le problème vient du mysql2. MySQL semble fonctionner correctement et mon fichier 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'ancienne gemme MySQL, WEBrick démarre correctement. Mais ce n'est pas idéal, n'est-ce pas?

J'ai tout essayé avec google! Toute aide très appréciée.

204
Jonty Brook

Je n'ai jamais pu obtenir aucune de ces réponses pour travailler 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
392
bloveless

J'ai résolu ce problème, finalement! 

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

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!

93
Jonty Brook

Ce correctif a très bien fonctionné pour moi:

Ajoutez ce qui suit à votre ~/.profile

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

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-Rails-3/

88
nduplessis

Pour moi, c'était simplement parce que j'avais mis à jour mysql mais je n'avais pas mis à jour la gem mysql2 - une réinstallation de la gem corrigera cela ...

gem pristine mysql2

39
Luke

J'ai le même problème. Il semble qu'il soit impossible de 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 ni son paramétrage, mais mon installation mysql ne semble pas y être Je posterai à nouveau si je trouve une solution plus permanente.

Edit: En fait this fix semble résoudre plus précisément le problème.

26
Ogapo

Ajoutez le ci-dessous à votre ~/.bash_profile:

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

Cela a fonctionné pour moi

24
DV Dasari

Dans la mise à jour OSX El Capitan, procédez comme suit:

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 a retourné /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 vers usr/local/lib/ comme 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

17
Sony Mathew

les lignes suivantes fonctionnent pour moi. J'utilise mac 10.7.2.

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

13
S. Russell

Je viens de rencontrer ce problème. Tout ce que je devais faire était de désinstaller mysql2 gem et de le réinstaller. J'espère que cela fonctionne pour d'autres personnes

10
Anh Pham

Voici comment cela a fonctionné pour moi:

J'ai couru 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 ça aide quelqu'un. 

4
DV Dasari

bundle install mysql --force m'a aidé. Il a réinstallé les dépendances supprimées à la suite de brew uninstall mysql.

3
Aram

Je rencontrais ce problème lorsque je travaillais avec Django. J'utilise brew pour installer un grand nombre de mes programmes Open Source et je devais procéder comme suit, car j’ai utilisé brew pour installer mysql:

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

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

3
Addiction2Code

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

3
Ryan

salut cela a fonctionné pour moi 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

je viens de passer à ma version de mysql, dans la commande, merci

3
MaKo

Merci Ogapo! Exporter cet alias a fonctionné pour moi, puis j'ai suivi le lien et dans mon cas, le mysql2.bundle était dans /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle. J'ai ajusté l'outil install_name_tool pour modifier cet ensemble plutôt que celui de ~/.rvm et je l'ai obtenu comme il se doit.

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)
3
tobinjim

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. Rails s’exécute à partir de la ligne de commande, ainsi que des plugins TextMate comme Ruby-on-Rails-tmbundle.

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

2
Roger

Jonty, je lutte aussi avec ça.

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 plutôt court?

J'essaie de comprendre où les instructions d'installation des pierres précieuses ne suivent pas le chemin du dylib, mais c'est lent, je n'ai jamais construit de pierre précieuse moi-même.

Je posterai plus si j'en trouve plus!

2
tobinjim

J'ai eu exactement ce 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 vous dire ce que j'ai fait quand même. Peut-être que ça vous aidera.

J'ai commencé par télécharger RVM. Si vous ne l'utilisez pas encore, je vous le recommande vivement. Il crée essentiellement un bac à sable pour une nouvelle installation séparée de Ruby, RoR et RubyGems. En fait, vous pouvez avoir plusieurs installations simultanément et basculer instantanément les unes vers les 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 sous OS X. Le système en dépend. Il est préférable de laisser uniquement l'installation par défaut Ruby and RoR et d'en créer une nouvelle en utilisant RVM que vous pouvez utiliser pour votre propre développement.

Une fois que j'ai créé mon installation distincte Ruby, je viens d'installer RoR, RubyGems et mysql, et cela a fonctionné. Pour les étapes exactes que j'ai effectuées, voir ma question: Installation de Rails, MySQL, etc. Tout se passe mal

Encore une fois: je ne sais pas avec certitude que cela résoudra votre problème. Mais cela a certainement fait l'affaire pour moi, et dans tous les cas, utiliser RVM est hautement recommandé.

2
Rits

Cela se produit généralement lorsque vous mettez à niveau mysql. La gem mysql2 installée sur l’ancienne bibliothèque mysql ne peut pas fonctionner avec de nouvelles bibliothèques. Juste besoin de le réinstaller.

Désinstallez mysql2 avec gem uninstall mysql2. Puis installez-le avec gem install mysql2

2
longkt90

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
1
Tomasz Mazur

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 beaucoup de liens différents, comme je l'ai fait, nettoyez avec:

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

1
AlexJ

Pour moi, je devais désinstaller manuellement mysql

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

Ouvrez un Terminal et exécutez ce qui suit: 

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

Ça devrait marcher.

0
Slipstream

Si vous utilisez OSX et que vous avez installé mysql avec brew, vous pouvez:

brew link mysql

Si vous rencontrez des problèmes avec la version (j’avais mysql 5.7 alors que ma gem avait besoin de 5.6.25), vous pouvez

brew unlink mysql
brew switch mysql 5.6.25
0
Ariel Cabib