rails + MySQL sur OSX: bibliothèque non chargée: libmysqlclient.18.dylib

Je commence juste avec Ruby (et les rails). J’ai fait l’installation selon http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, en utilisant rvm . J’ai tout fonctionne bien avec sqlite.

Maintenant, je voudrais essayer de convertir les choses en MySQL, car c’est ce que je fais le plus de mon développement. Dans mon Gemfile, j’ai remplacé sqlite avec mysql2:

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

Mais quand j’essaye de créer la firebase database pour les rails dans MySQL, je reçois:

 $ 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 

J’ai vu d’autres articles recommandant de réinstaller MySQL via homebrew (le mien était installé via un DMG téléchargeable), mais je préférerais ne pas le faire car j’ai déjà plusieurs autres bases de données pour d’autres projets non-ruby.

J’ai en fait le fichier que recherche Rails; il est installé dans /usr/local/mysql/lib/libmysqlclient.18.dylib . Quelle est la meilleure façon de dire à Rails comment le localiser?

La solution est assez facile Ajoutez le chemin de la bibliothèque dans votre fichier ~ / .bash_profile ou ~ / .profile:

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

Si cela ne fonctionne toujours pas (ce travail pour moi):

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

Il existe de nombreux blogs avec install_name_tool , ce qui ne fonctionnera pas pour moi car je suis sur 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 

Dans El Capitan, j’ai eu ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Dans El Capitan /usr/lib/ maintenant un drapeau restreint et ne peut pas être écrit sans désactiver la sécurité, alors je mets simplement le lien dans /usr/local/lib place.

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

Le serveur Rails fonctionne à nouveau correctement.

Bien que le titre de cette question décrive précisément le problème que j’ai rencontré, les circonstances diffèrent de celles décrites dans les réponses précédentes, tout comme la solution.

Dans mon cas (El Capitan, mysql installé via homebrew), une brew update && brew upgrade provoqué la brew update && brew upgrade du paquetage mysql vers 5.7.10 (à partir de la version 5.6.x).

La mise à niveau a remplacé libmysqlclient.20.dylib par libmysqlclient.20.dylib , mais la gem mysql2 toujours sur la première.

Pour résoudre le problème, j’ai fait: gem uninstall mysql2 && gem install mysql2

Veuillez noter que des problèmes similaires peuvent survenir avec différentes bibliothèques gérées par homebrew ( voir par exemple ma propre réponse )

 sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

Cela a fonctionné pour moi. J’ai installé MySQL à partir d’un fichier dmg.

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

Travaillé pour moi Tous les semblables ne l’ont pas fait.

Si vous utilisez MySQL installé depuis HomeBrew dans El Capitan, vous devez le lier comme suit:

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

J’ai rencontré ce problème après une suppression complète, puis une nouvelle installation de MySQL. Plus précisément:

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

Je n’avais même pas touché mon application Rails.

Réinstaller le gem mysql2 résolu ce problème.

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

Pour MySQL 5.6 installé à partir de DMG sur Mavericks

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

Je confirme que le patch d’Abhishek fonctionne.

ça marche aussi pour Yosemite.

note: au lieu de créer un lien vers une version particulière de mysql, utilisez le fait que mysql a déjà créé symlink:

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

Cette solution fonctionne pour les API Xcode et C.

Pour être sûr de quel lien symbolique est nécessaire (dépendez de la version de mysql et de la version d’OS):

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

et donc :

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

Cela fonctionne pour moi:

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

J’utilise Rails REE (2.3.4) pour un système existant. Après la mise à niveau vers El Capitan, l’exécution de script / console a déclenché une erreur et mon application ne démarre plus (avec 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) 

À partir de ce sujet, ci-dessus, j’ai déterminé que je devais émettre cette commande dans le terminal:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Cette commande a généré une erreur: “ln: /usr/lib/libmysqlclient.18.dylib: opération non autorisée”. Je n’ai jamais vu cette erreur avant.

Après avoir creusé un peu, j’ai trouvé cet article: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html et suivi le instructions pour désactiver SIP (la nouvelle protection de l’intégrité du système d’El Capitan). Après avoir désactivé SIP et après le redémarrage, la commande ln a fonctionné correctement. Puis j’ai désactivé SIP. Maintenant tout va bien. Mon application s’exécute à nouveau en utilisant pow et aucune erreur exécutant le script / la console. J’espère que ceci vous aide.

Sur Mac Sierra si vous utilisez Homebrew alors faites:

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

et

 bundle install 

travaillé pour moi

Pour ceux qui utilisent le breuvage. Il suffit de lier la version mysql avec l’option “–force”.

 brew link mysql56 --force 

utilisez ceci depuis votre ligne de commande:

 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 

essayé sur quelques ordinateurs avec Maverick fonctionne toujours

Si vous utilisez Bitnami RubyStack et que vous rencontrez le même problème. Essaye celui-là

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

Mon problème avec le chargement de ce fichier bundle était un mauvais lien symbolique. Alors vérifiez le lien et remplacez-le par un nouveau si nécessaire. Tout est tombé en place à ce moment-là. Je ne sais pas comment ça s’est passé, mais ça l’a fait. Première fois qu’une erreur de syntaxe s’est produite comme ça.

Je travaillais avec la commande rails g model et j’ai cette erreur:

 Library not loaded: libmysqlclient.18.dylib 

J’ai essayé cela et ça a fonctionné pour moi. J’utilisais 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 

Merci!

Maintenant, j’utilise Yosemite 10.10.5 et j’ai la même erreur, alors je viens de lancer cette commande sur le terminal et il a été corrigé avec succès.

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

vous pouvez aussi essayer:

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

Les deux fonctionnent très bien pour moi. J’espère que cela pourrait être utile!

J’ai ce problème “Bibliothèque non chargée: libmysqlclient.18.dylib” lors de l’importation de MySQLdb à partir de MySQL Pour python3 :

  Traceback (most recent call last): File "test.py", line 3, in  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  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 solution fonctionne pour moi: 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 

La seule chose qui a fonctionné pour moi est:

 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 

Remplacez les chemins de mysql et de gems pour les adapter à votre système.

Après beaucoup de googler et d’essayer tout ce qui précède … la seule chose qui a résolu mon problème était cette commande:

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

J’utilise un MacBook Pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: jeu. Juin 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