rails + MySQL sur OSX: Bibliothèque non chargée: libmysqlclient.18.dylib
je commence avec Ruby (and rails). J'ai fait la configuration selon http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gemmes, en utilisant rvm
. J'ai tout qui fonctionne bien avec sqlite.
maintenant j'aimerais essayer de convertir les choses en MySQL, puisque c'est avec cela que je fais la plus grande partie de mon développement. Dans mon Gemfile j'ai remplacé sqlite par mysql2:
group :development, :test do
# gem 'sqlite3', '1.3.5'
gem 'mysql2'
gem 'rspec-rails', '2.9.0'
end
Mais quand j'essaie de créer le DB 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 a été installé via un DMG téléchargeable), mais je préférerais ne pas le faire car j'ai plusieurs autres bases de données là-bas déjà pour d'autres projets non-ruby.
j'ai en fait le fichier que Rails recherche; il est installé dans /usr/local/mysql/lib/libmysqlclient.18.dylib
. Quelle est la meilleure façon de dire à Rails comment le localiser?
22 réponses
la solution est assez facile; ajoutez le chemin de la bibliothèque dans votre ~/.bash_profile ou ~/.fichier de profil:
MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
si elle ne fonctionne toujours pas (ce travail pour moi):
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
il y a beaucoup de blogs avec install_name_tool
, qui ne fonctionneront 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
À El Capitan j'ai eu ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
dans El Capitan /usr/lib/
a maintenant un drapeau restreint et ne peut pas être écrit sans désactiver la sécurité donc j'ai juste mis le lien dans /usr/local/lib
à la 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 sont différentes de celles décrites dans les réponses précédentes, et donc la solution.
dans mon cas (El Capitan, mysql installé via homebrew), un brew update && brew upgrade
a fait passer le paquet mysql à 5.7.10 (à partir de 5.6.x).
la mise à niveau a fait remplacer libmysqlclient.18.dylib
par libmysqlclient.20.dylib
, mais le mysql2
gem comptait toujours sur l'ancien.
pour corriger le problème j'ai fait: gem uninstall mysql2 && gem install mysql2
Veuillez noter que des problèmes similaires peuvent se produire avec différents homebrew bibliothèques gérées ( voir ma propre réponse à cette question, par exemple )
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
ça a marché 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
travaillait pour moi. Tous les semblables ne l'ont pas fait.
si vous utilisez MySQL installé à partir de HomeBrew dans El Capitan, alors vous devez le relier 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é mes Rails app.
réinstaller le mysql2
gem 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 patch D'Abhishek does travail.
ç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à construit symlink:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
cette solution fonctionne pour Xcode et C API.
pour être sûr de ce que le lien symbolique est nécessaire (dépend de la version mysql et de la version os):
$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib
et ainsi de suite :
ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
ça marche 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 que nous avons déjà. Après la mise à niveau vers El Capitan, l'exécution de script / console a généré une erreur et mon application ne démarrait plus (en utilisant 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 même fil, 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 produit une erreur: "ln: /usr/lib/libmysqlclient.18.dylib: opération pas le droit". 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 a suivi les instructions pour désactiver SIP (la nouvelle protection de L'intégrité du système D'El Capitan). Après avoir éteint SIP off, et après avoir redémarré, la commande ln a bien fonctionné. Puis J'ai éteint SIP off. Maintenant, tout est très bien. Mon application tourne à nouveau utilisation de pow et aucune erreur en cours d'exécution script / console. J'espère que cela vous aide.
Sur Mac Sierra si vous utilisez Homebrew alors:
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
travaillait pour moi.
pour ceux qui utilisent brew. Il suffit de lier votre version mysql avec l'option "--force".
brew link mysql56 --force
utilisez ceci de 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 les ordinateurs fews avec maverick fonctionne toujours
si vous utilisez Bitnami RubyStack et couru à travers le même problème. Essayez celui-ci
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 était un mauvais lien symbolique. Vérifiez donc le lien, et remplacez-le par un nouveau si nécessaire. Tout s'est mis en place à ce moment-là. Je ne sais pas comment c'est arrivé, mais c'est arrivé. C'est la première fois qu'une erreur de syntaxe se produit comme ça.
je travaillais avec la commande rails g model et j'ai eu cette erreur:
Library not loaded: libmysqlclient.18.dylib
j'ai essayé ceci et cela 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 eu la même erreur, donc j'ai juste lancé cette commande sur le terminal et il a été réparé 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
ils travaillent tous les deux très bien pour moi. Espérons qu'il pourrait être utile!
j'ai eu ce problème de "la Bibliothèque n'est pas chargé: libmysqlclient.18.dylib" lors de l'import MySQLdb de MySQL Pour 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 Solution me convient: 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
remplacer les chemins de mysql et les gemmes pour s'adapter à votre système.
après beaucoup de googling et d'essais tout au-dessus...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: Thu 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