Je viens juste de commencer avec Ruby (et Rails). J'ai fait la configuration 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 en MySQL, car c'est ce que je fais la plupart de mes développements avec. 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 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 publications recommandant de réinstaller MySQL via homebrew (le mien a été installé via un fichier DMG téléchargeable), mais je préférerais ne pas le faire car j'ai déjà plusieurs autres bases de données dans d'autres projets non Ruby.
En fait, j'ai 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 (cela fonctionne 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
, 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
À 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é. Je viens donc de mettre 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.
Alors que 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), un brew update && brew upgrade
provoquait la mise à niveau du paquet mysql vers la version 5.7.10 (à partir de la version 5.6.x).
La mise à niveau a entraîné le remplacement de libmysqlclient.18.dylib
par libmysqlclient.20.dylib
, mais la gemme mysql2
s’appuyait toujours sur la version précédente.
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 à 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
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 n'ont pas.
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 gemme mysql2
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]
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
Pour MySql 5.6 installé par 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 le correctif 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à 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.
Pour ceux qui utilisent de la bière. Liez simplement votre version mysql avec l'option "--force".
brew link mysql56 --force
Cela fonctionne pour moi:
ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Pour être sûr du lien symbolique nécessaire (dépend de la version de 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 donc :
ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
J'utilise Rails REE (2.3.4) pour un système existant que nous avons. Après la mise à niveau vers El Capitan, l'exécution du script/de la console générait une erreur et mon application ne démarrerait plus (à l'aide de 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)
De ce même fil, ci-dessus, j'ai déterminé que j'avais besoin d'é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 auparavant.
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 suivez les 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 avec pow et aucune erreur n’exécute le script/la console. J'espère que ceci vous aide.
gem uninstall -aIx
et
bundle install
a travaillé pour moi.
Sous Mac Sierra, si vous utilisez Homebrew, procédez comme suit:
Sudo ln -s /usr/local/Cellar/[email protected]/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
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
Après beaucoup de recherches sur Google et d'essayer tout ce qui précède ... la seule chose qui résolve mon problème est 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 Noyau Darwin version 15.6.0: jeu. 23 juin 18:25:34 HAP 2016; XXX: xnu-3248.60.10 ~ 1/RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19
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
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 est tombé en place à ce moment-là. Je ne sais pas comment cela s'est passé, mais c'est ce qui s'est passé. La première fois qu'une erreur de syntaxe s'est produite comme ça.
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 par votre système.
Si vous utilisez Bitnami RubyStack et rencontrez le 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
Je travaillais avec la commande Rails g model 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 la même erreur, alors je viens d'exécuter 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
aussi vous pouvez 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!