Ruby mysql2 gem compilé pour une mauvaise version de la bibliothèque cliente mysql
Après la mise à jour de MySQL 5.5 à l'aide de apt-get, le mysql2
gem cessé de travailler.
Voici l'erreur:
Incorrect MySQL client library version!
This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
J'ai essayé de réinstaller avec mysql_config mais il ne semble pas faire une différence..
gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config
En conséquence, j'ai essayé de raconter bundle pour compiler mysql2 avec mysql-config, mais encore, l'erreur reste..
bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install
Quand j'ai essayé une version plus ancienne de la gemme (v0.2.6) les rails de la console s'ouvre, mais se bloque une fois que j'ai exécuter n'importe quel type de requête.
Voici le message d'erreur de la pile lorsque vous essayez la version la plus récente de la mysql2 gem:
[marco@linode:/www] 07:29:00 AM: rails c
/users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `require': Incorrect MySQL client library version! This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `<top (required)>'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
from /www/config/application.rb:7:in `<top (required)>'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Modifier: j'ai supprimé tous les mysql2 gemspecs de cache, désinstallé tous mysql paquets avec apt-get et réinstallé tout nouveau, puis à nouveau essayé d'installer la gem avec mysql-config drapeau .. mais tous se sont avérés vains. L'erreur reste.
Edit 2: Comme suggéré par John Bachir, j'ai confirmé que mysql_config contient version de MySQL 5.5.
database.yml
et le fichier de configuration de mysql my.cnf
OriginalL'auteur Marco | 2011-11-15
Vous devez vous connecter pour publier un commentaire.
Je rencontre la même erreur lors de l'utilisation d'Ubuntu Server 11.04 et Percona Server, qu'ai-je fait était:
remplacer
/usr/lib/libmysqlclient.so.16.0.0
avec/usr/lib/libmysqlclient.so.18.0.0
libmysqlclient_r.so.18
? J'ai remplacé tous leslibmysqlclient.so.16
les fichiers avec l' "18" version, mais je n'ai pas de correspondant "18" fichier pour/usr/lib/libmysqlclient_r.so.16
donc c'est peut-être le coupable.dans mon système, libmysqlclient_r est un symbole de lien de libmysqlclient
Le fichier est
libmysqlclient.so.16.0.0
, les autres fichiers commelibmysqlclient.so.16
,libmysqlclient.so
sont toutes symbole des liens.Réussi à le faire fonctionner, merci pour l'aide!
Tout cela permettra de résoudre ce problème particulier, je serais extrêmement fatigués de le résoudre de cette manière. Cela va probablement casser d'autres morceaux de logiciels qui ont été compilées par rapport à la version 16. Je dirais
apt-cache purge libmysqlclient16
si elle ne supprime pas quelque chose que vous n'avez pas besoin.OriginalL'auteur ShiningRay
La fin de la partie, mais j'ai juste fait
Gem chemin a été
Merci, ça a bien fonctionné pour moi sur ruby 2.0.0 et les rails 4 application. Erreur de produit probablement dû à la mise à jour de la version du serveur mysql.
Ne fonctionne pas, comme le Joyau n'a pas été compilé à nouveau. Après MySQL client est mis à jour, le bijou doit être compilé avec les nouvelles bibliothèques.
OriginalL'auteur François Drolet
J'ai eu ce problème et a juste besoin de recompiler le gem. Je ne sais pas si il y a des façon plus pragmatique avec bundler, mais j'ai juste enlevé la compilation des gem et puis re-couru bundler:
OriginalL'auteur seb
Je suis tombé sur un problème similaire:
Et ma version de MySQL sur Mac:
et la mysql2 gem installé par
bundle install
est mysql2-0.3.13J'ai résolu ce problème par la seule définition de l'mysql2 gem à une version plus ancienne dans le Gemfile:
Si
'0.2.6'
ne fonctionne pas pour vous, vous pouvez essayer un autre ancien numéro de version.OriginalL'auteur Xiao Li
Plutôt que de déplacer les fichiers de bibliothèque, vous pouvez également consulter la liste des paquets pour votre système, si vous avez mis à niveau à 5.5 à l'aide de apt-get, il est probable que vous avez toujours 5.1 bibliothèques qui traînent que vous n'avez pas besoin de plus. Par exemple, sur un système où nous avons rencontré un problème similaire, on avait encore le 5.1 de la bibliothèque:
Plutôt que de copier l'5.5 bibliothèque sur le 5.1 de la bibliothèque, vous devriez être en mesure de les supprimer:
Pour nous, cela a été plus fiable que la bibliothèque de renommer la solution proposée plus haut.
OriginalL'auteur Austin Mills
Je rencontre ce problème et je ne pouvais pas résoudre avec ma méthode précédente(utilisez une version plus ancienne mysql2 gem). J'ai donc essayer une autre méthode comme ces étapes:
1.trouver qui mysql_config que votre joyau de la bibliothèque dépendent.
mysql_config situation est différente dans les différentes personnes de la machine, et qu'une seule machine peut avoir plusieurs mysql_config, donc il n'y a pas de norme mysql_config chemin d'accès pour tout le monde.
Comme cette question, par exemple, la mysql_config version est "5.1.58", de sorte que vous pouvez rechercher "mysql", le fichier dans la racine pour trouver ce qui est en relation avec "5.1.58":
2.installer mysql2 joyau de la bibliothèque en mysql_config chemin trouver dans l'étape 1
OriginalL'auteur Xiao Li
Autre que de s'assurer que seuls les
libmysqlclient18
de la bibliothèque a été installée (et non 16), ce qui a fonctionné pour moi a été l'installation delibmysqlclient18-dev
(le dev en-têtes).C'est avec Percona Server 5.5 sur Ubuntu Precise.
OriginalL'auteur Vaz
J'ai essayé toutes les réponses ci-dessus et mon approche finale était assez simple: supprimer l'ensemble de l'livré joyau de la pile et tout réinstaller. Qui a finalement obtenu autour de la client mysql question. c'est à dire
rm-rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
bundle install
OriginalL'auteur fuzzygroup
si vous connaissez un programme c,vous pouvez supprimer ce message. l'omettre.
ouvrir ce mysql.gem
mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c
trouver "Ce petit bijou a été compilé" ,supprimez-la si la peine .
vous devez définir sys-variable locale gemfile installer sur le système windows . ENSEMBLE HOMEDRIVE=c:
ERREUR: lors de l'exécution de bijou ... (Errno::EINVAL) Invalid argument @ rb_file_s_stat - U:/
installer les locaux de gem fichier . C:\Rails>gem install --local mysql-2.9.1.bijou-install-dir=c:/tmp --= plate-forme de rubis -- --with-mysql-dir=C:/Rails/mysql-connector-c
mysql-connector-c visite mysql http://dev.mysql.com/downloads/connector/c/ . vous n'avez pas de soins de version.
essayer de nouveau.
require 'mysql'
OriginalL'auteur Gao.YD
Assurez-vous que
/usr/bin/mysql_config
est en effet celui qui est venu avec 5.5.Essayez de retirer le bijou en premier.
J'ai, ainsi que la mise en cache gemspec fichiers et le vendeur/cache et tout ce que j'ai pu trouver à distance liée à la gemme. J'ai même désinstallé le libmysqlclient des fichiers, ainsi que la gemme, avant de tout réinstaller, mais en vain.
Interrupteur à Postgres. (just kidding)
Hehe, je suis le considérer à ce point..
OriginalL'auteur John Bachir
Dans mon cas, j'ai eu divers fichiers de libmysqlclient15 (en date de 2009) et libmysqlclient16 (daté 20012) à gauche dans /usr/lib, éventuellement à partir d'un faux de mise à niveau de Ubuntu.
Retrait de la libmysqlclient15 fichiers (qui étaient liés à libmysqlclient15.si) a résolu mon problème.
OriginalL'auteur Paul Schreiber
Sur ma machine, j'ai dû désinstaller le bijou, puis re-direct le lien
/usr/local/mysql
à la bonne version Homebrew:Puis exécutez
bundle install
.OriginalL'auteur Steve Lorek
Réinstaller libmysqlclient-dev avec
apt remove libmysqlclient-dev && apt install libmysqlclient-dev
fixe pour moiOriginalL'auteur fangxing