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?

109
demandé sur The Unfun Cat 2012-05-11 23:33:47

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
296
répondu atejeda 2013-07-23 16:44:55

À 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.

120
répondu TinMonkey 2015-09-30 21:20:20

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 )

40
répondu Giuseppe 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

ça a marché pour moi. J'ai installé MySQL à partir d'un fichier dmg.

25
répondu Joseph 2013-07-23 16:45:34
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.

16
répondu Greg Benner 2013-07-23 16:45:12

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
8
répondu arjunswaj 2015-10-10 09:50:53

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]

8
répondu sealocal 2016-02-24 20:52:24

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
6
répondu Abhishek Pande 2013-11-13 20:13:58

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.

4
répondu ingconti 2014-07-15 20:02:51

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
2
répondu Fraide 2015-05-31 13:44:51

ça marche pour moi:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
2
répondu Son 2016-05-12 20:53:55

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.

1
répondu GeezerGeek 2015-12-09 15:03:50

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
1
répondu Abhishek 2017-02-27 11:17:58
gem uninstall -aIx

et

bundle install

travaillait pour moi.

1
répondu atomiccoder 2017-04-29 21:29:31

pour ceux qui utilisent brew. Il suffit de lier votre version mysql avec l'option "--force".

brew link mysql56 --force
1
répondu tagaism 2017-10-14 15:27:30

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

0
répondu toxic 2014-01-18 09:36:07

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
0
répondu noelvictorino 2014-08-07 09:51:51

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.

0
répondu Rich_F 2015-08-18 16:10:06

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!

0
répondu Alex Ventura 2015-08-30 20:24:31

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
0
répondu Binh Dang 2015-12-01 16:56:17

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.

0
répondu Aleksandar Pavić 2016-02-27 17:10:13

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

0
répondu Redcloud 2016-08-28 15:12:50