38 votes

rails server ne parvient pas à démarrer avec mysql2 avec rvm & ruby 1.9.2-p0 sur OSX 10.6.5

J'obtiens l'erreur suivante lorsque je démarre le serveur rails:

$ rails server
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require':     dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) 
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-    
0.2.6/lib/mysql2/mysql2.bundle

J'ai installé mysql2 avec la commande suivante après la rvm utilisation de ruby 1.9.2-p0 commande:

$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Building native extensions.  This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Client not known

J'ai mysql2 dans mon Gemfile ainsi que dans la base de données.fichier yml et bundle install complète amende

$ bundle show mysql2
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6

Je comprends le serveur rails erreur en ne sachant pas le mysql_config emplacement sur OSX, mais sur les gem install, j'ai spécifié l'emplacement correct. Encore RVM de la gemme n'est pas le respect que mysql_config emplacement, il me semble.

Quelqu'un a une solution à cela?

64voto

Le problème vient de la mysql2 joyau manquant de la dynamique de la bibliothèque à partir de MySQL.

Une solution plus propre que install_name_tool ... serait nécessaire pour mettre à jour votre DYLD_LIBRARY_PATH ajouter MySQL libs pour elle. Pour ce faire, de mettre à jour votre ~/.bash_profile ajouter MySQL dossier de la bibliothèque :

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

Remarque: Vous pouvez mettre à jour la base de données MySQL endroit, en fonction de votre installation

Cela devrait garder les choses propres, mais aussi de s'assurer que n'importe quel bijou ou de code nécessitant MySQL bibliothèques dynamiques trouverez.

Référence : http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Mise à Jour des références juillet 2012: Un changement dans OS X 10.8 rend facile la méthode ci-dessus est moins élégant. Si vous définissez cette variable, chaque fois que vous exécutez un setuid ou setgid programme, vous obtenez ce message d'avertissement sur stderr:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid

Développeurs Ruby à l'aide de Phusion Passenger Autonome verrez ce message s'affiche dans la console toutes les cinq secondes. Il devient vraiment énervant, très rapide.

J'ai déposé un bug avec Apple. C'est aussi à OpenRadar.

Dans l'intervalle, il y a une troisième façon de résoudre le client bibliothèque problème de chemin d'accès qui ne nécessite pas de réglage DYLD_LIBRARY_PATH (travail autour de cette 10.8 question) ou de piratage .organisez les fichiers avec install_name_tool:

$ brew install mysql

22voto

Frederic Points 201

J'ai trouvé la réponse ici: Mysql 5.5, Snow Leopard et rails

 sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
 

8voto

ronen Points 583

Sur OS X 10.8 (Mountain Lion), les réponses ont tous des problèmes, comme indiqué dans les réponses et les commentaires.

  • Paramètre DYLD_LIBRARY_PATH d'inclure le fichier /usr/local/mysql/lib donne des avertissements à partir de OS X et de brew
  • À l'aide de install_name_tool de pirater où la gemme binaire semble aurait besoin d'être refait à chaque fois que le gem est installé ou mis à niveau.
  • Commutateur brews'mysql peut ne pas fonctionner; et, en tout cas, je ne veux pas reconfigurer déjà d'un travail d'installation

Un moyen plus simple et robuste solution à mon humble avis est de mettre un lien à la bibliothèque dans la dynamique par défaut chemin de recherche des bibliothèques, qui comporte /usr/local/lib. C'est:

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

5voto

dbaugh Points 128

Le projet de loi,

Frédéric réponse permettra de résoudre ce problème, cependant, vous devrez peut-être modifier certains des éléments de la commande en fonction des versions et de la façon dont les choses sont nommés sur votre système.

Par exemple, sur la version la plus récente de mysql libmysqlclient.16.dylib est en fait libmysqlclient.18.dylib. Essayez de faire un:

locate libmysqlclient.18.dylib

Si cela ne retourne pas le chemin, vous pouvez aller à:

/usr/local/{your-mysql}/lib

pour trouver le fichier. Alors juste un PWD pour trouver le bon répertoire pour la commande.

Vous aurez aussi besoin de déterminer quel est le véritable nom des paquets de rubis que vous avez installés sont. Vous pouvez le trouver en utilisant

rvm info 

Par exemple, mon installation de 1.9.2 est ruby 1.9.2.p180, pas de ruby 1.9.2p0. Ce sera ont besoin d'être changé Frederics de commande ainsi.

Donc, pour moi, de Frédéric de commande est devenu pour la fixation de la rvm rubis pour 1.8.7 et 1.9.2, respectivement:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

3voto

Todd Points 110

ci-dessous via: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Mise À Jour En Juillet 2012:

Un changement dans OS X 10.8 rend facile la méthode ci-dessus est moins élégant. Si vous définissez cette variable, chaque fois que vous exécutez un setuid ou setgid programme, vous obtenez ce message d'avertissement sur stderr:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid

Développeurs Ruby à l'aide de Phusion Passenger Autonome verrez ce message s'affiche dans la console toutes les cinq secondes. Il devient vraiment énervant, très rapide.

J'ai déposé un bug avec Apple. C'est aussi à OpenRadar.

Dans l'intervalle, il y a une troisième façon de résoudre le client bibliothèque problème de chemin d'accès qui ne nécessite pas de réglage DYLD_LIBRARY_PATH (travail autour de cette 10.8 question) ou de piratage .organisez les fichiers avec install_name_tool:

$ brew install mysql

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X