rails + MySQL sous OSX: Bibliothèque non chargée: libmysqlclient.18.dylib

119

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, j'aimerais essayer de convertir des choses vers MySQL, car c'est ce avec quoi je fais la plupart 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 lorsque j'essaie de créer la base de données pour les rails dans MySQL, j'obtiens:

$ 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 publications recommandant de réinstaller MySQL via homebrew (le mien a été installé via un DMG téléchargeable), mais je préfère 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 recherché par Rails; il est installé dans /usr/local/mysql/lib/libmysqlclient.18.dylib. Quelle est la meilleure façon de dire à Rails comment le localiser?

George Armhold
la source
Cela pourrait-il être un double de cela? stackoverflow.com/questions/4546698/…
gmile
En effet. Je ne peux pas supprimer ma propre question? Voté pour fermer comme dup.
George Armhold

Réponses:

313

La solution est assez simple; 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 (cela fonctionne 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, 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
atejeda
la source
16
Le lien symbolique a fonctionné pour moi (après la mise à niveau vers Mountain Lion). Merci!
siannopollo
5
Symlink le fait, en particulier pour les cas tels que l'exécution de rails sous RubyMine où .bash_profilecela ne s'applique pas vraiment.
maksimov
2
J'ai ajouté votre DYLD_LIBRARY_PATH à .bash_profile, mais j'ai également dû désinstaller le gem 'mysql2' puis le réinstaller. comme: 'gem uninstall mysql2 && gem install mysql2'
brendan
73
Pour ceux qui viennent ici pour 10.11, vous ne pouvez plus créer de lien symbolique usr/libmais un lien symbolique vers usr/local/libfonctionnera:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons
2
@JonathanSimmons - Vous venez de m'empêcher d'arracher le reste de mes cheveux. La réponse originale du lien symbolique ne fonctionne pas sous OS X 10.11.5, vous vous retrouvez simplement avec l'erreur "ln: /usr/lib/libmysqlclient.18.dylib: Opération non autorisée" - Tout fonctionne maintenant et je peux enfin démarrer mon travailler pour la journée ... Merci!
Colin Adams
125

À El Capitan, j'ai ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Dans El Capitan a /usr/lib/maintenant un drapeau restreint et ne peut pas être écrit sans désactiver la sécurité, donc je viens de mettre le lien à la /usr/local/libplace.

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

Le serveur Rails fonctionne à nouveau correctement.

TinMonkey
la source
2
Je n'avais pas besoin de toute la réponse d'Alex. Un lien symbolique a fait l'affaire.
gitb
J'ai fait cela et j'ai obtenu: "connect ': Impossible de se connecter au serveur MySQL local via le socket' /tmp/mysql.sock '(2) (Mysql2 :: Error)"
Josh Hunter
1
@JoshHunter Je pense que c'est un problème distinct. Il y a un fil de discussion ici stackoverflow.com/questions/18449050/ ... pourrait aussi simplement être que le serveur MySQL n'est pas en cours d'exécution.
TinMonkey
ouais, le serveur ne fonctionnait pas ... cela l'a corrigé sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter
62

Si le titre de cette question décrit 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, de même que la solution.

Dans mon cas (El Capitan, mysql installé via homebrew), a brew update && brew upgradeprovoqué la mise à jour du paquet mysql vers la version 5.7.10 (à partir de la version 5.6.x).

La mise libmysqlclient.18.dylibà niveau a été remplacée par libmysqlclient.20.dylib, mais le mysql2joyau reposait toujours sur l'ancien.

Pour résoudre le problème que 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 ma propre réponse à cela, par exemple )

Giuseppe
la source
Génial ! J'ai mis à jour mon mysql vers 5.7 ... j'ai rencontré ce problème ..... fait les étapes suivantes 1. gem désinstaller mysql2> option 3 sélectionnée 2. gem install mysql2 3. ajouté ceci au gemfile du projet ---> gem 'mysql2' , '~> 0.3.21' 4. installation du bundle
Udit Kapahi
10
Je recommande à tout le monde d'essayer ceci en premier! Si cela fonctionne, vous pouvez éviter de surcharger votre système avec l'une des autres solutions de contournement. Parfois, vous devez compter sur des liens symboliques magiques, etc., mais cela rend votre système de plus en plus fragile. (Si cela ne fonctionne pas, aucun mal n'est fait et rien à réparer.)
Tom Wilson
A travaillé pour moi aussi. Le problème était que je suis passé de l'installation de mysql w / homebrew à l'installateur officiel.
xenetics
1
Pour tous les utilisateurs de python qui arrivent ici, pip uninstall mysqlclientet ont pip install mysqlclientégalement travaillé.
Peter Dolan
26
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.

Joseph
la source
Cela a fonctionné sur Mac OS X - Yosemite pour moi avec MySQL installé à partir du fichier dmg. Merci Joseph.
racl101 le
4
Opération non autorisée (évidemment avec sudo) ma version SO est El capitan
ignacio chiazzo
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

A travaillé pour moi. Tous les similaires ne l'ont pas fait.

Greg Benner
la source
C'est la solution pour RubyMine.
Justin
13

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.

La réinstallation de la mysql2gemme a 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]

Sealocal
la source
9

Si vous utilisez MySQL installé à partir de HomeBrew à 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
arjunswaj
la source
6

Pour MySql 5.6 installé depuis 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
Abhishek Pande
la source
4

Je confirme patch à partir Abhishek fait le travail.

cela fonctionne 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 un lien symbolique:

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

cette solution fonctionne pour Xcode et C API.

ingconti
la source
3

Pour ceux qui utilisent de la bière. Liez simplement votre version de mysql avec l'option "--force".

brew link mysql56 --force
tagaïsme
la source
C'est la manière de lier le fichier de bibliothèque ... plutôt que d'utiliser l'option ln -s. Utilisez le lien de brassage [email protected] --force pour la version mise à jour
Vahid Kowsari
Merci. Je l'ai fait brew link [email protected] --force. A parfaitement fonctionné.
Aye Mon Chit
2

Pour être sûr du lien symbolique nécessaire (dépend de la version de mysql et de la version du système d'exploitation):

$ 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
Fraide
la source
2

Cela fonctionne pour moi:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Fils
la source
A fini par être une variation pour moi ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor
1

J'utilise Rails REE (2.3.4) pour un ancien système que nous avons. Après la mise à niveau vers El Capitan, l'exécution du script / de la console a généré une erreur et mon application ne démarre 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 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 a produit une erreur: "ln: /usr/lib/libmysqlclient.18.dylib: Opération non autorisée". Je n'ai jamais vu cette erreur auparavant.

Après un peu de fouille, 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 bien fonctionné. Ensuite, j'ai désactivé SIP. Maintenant tout va bien. Mon application s'exécute à nouveau en utilisant pow et aucune erreur en cours d'exécution de script / console. J'espère que ceci vous aide.

GeezerGeek
la source
1

Sur Mac Sierra, si vous utilisez Homebrew, procédez comme suit:

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

et

bundle install

travaillé pour moi.

atomiccoder
la source
1

Cela a fonctionné pour moi. Tout ce que j'avais à faire est de désinstaller mysql2 gem et de l'installer à nouveau en utilisant les commandes ci-dessous

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config
Magesh
la source
1

J'utilise Mac OS et j'étais coincé avec ce bogue même après avoir désinstallé / supprimé tout mysql et MAMP. Auparavant, j'ai installé brew install mysqlet également utilisé MAMP. addling softlink n'a pas fonctionné pour moi.

Il n'a été résolu qu'en supprimant tous les mysql existants. puis installez mysql via MySQL à partir d'ici .

Manish Shrivastava
la source
0

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

toxique
la source
0

Si vous utilisez Bitnami RubyStack et que vous rencontrez un problème similaire. Essaye celui-là

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

Mon problème avec le chargement de ce fichier bundle é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 cela s'est passé, mais c'est le cas. Première fois qu'une erreur de syntaxe s'est produite comme ça.

Rich_F
la source
0

Je travaillais avec la commande de modèle rails g et j'ai eu cette erreur:

Library not loaded: libmysqlclient.18.dylib

J'ai essayé cela 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 exécuté cette commande sur le terminal et elle a été corrigée 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 également 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!

alexventuraio
la source
0

J'ai eu ce problème "Bibliothèque non chargée: libmysqlclient.18.dylib" lors de l'importation de MySQLdb depuis 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 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
Binh Dang
la source
@MSU_Bulldog Bien sûr, cela répond à la question. Il fournit même de nouvelles informations. Ce n'est pas parce qu'une réponse inclut l'erreur qui les a amenés ici que la solution qu'ils fournissent également est sans valeur.
Artjom B.
0

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 gems pour s'adapter à votre système.

Aleksandar Pavić
la source
0

Après beaucoup de recherches sur Google 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 23 juin 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 MySQL: 5.6.19

Nuage rouge
la source
0

Merci. Une mise à niveau Homebrew a fait que mes applications Rails ont des problèmes sur mon Mac. J'ai réinstallé MySQL (5.7) à partir des sources, puis j'ai dû le faire

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

basé sur ce que j'ai lu ci-dessus et dans mon Gemfile

gem 'mysql2', '0.5.3'

et dans database.yml

adapter: mysql2
rodmclaughlin
la source
0

Il y a déjà beaucoup de réponses à cette question, en particulier celle-ci https://stackoverflow.com/a/10847618/5515861 . Je veux seulement ajouter quelques notes. Si vous utilisez Mac, je ne sais pas comment vous installez MySQL, mais la première chose à examiner est de savoir où se trouve votre installation MySQL. Pour moi, MySQL est installé en utilisant brewfor version 5.7, et l'emplacement est /usr/local/opt/[email protected]/, alors ajoutez ce qui suit à mon ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

J'espère que vous résolvez vos problèmes 😁

abmap
la source