2008-12-04 6 views
2

Linux 2.6.18-92.el5, Ruby 1.8.7, Rails 2.2.2, gem mysql 2.7pilote MySQL Ruby ne pas trouver les bibliothèques nécessaires

J'ai installé la distribution binaire MySQL sous/usr/local, puis installé la gemme mysql comme ceci:

gem install mysql --no-rdoc --no-ri \ 
    -- --with-mysql-include=/usr/local/mysql/include \ 
    --with-mysql-lib=/usr/local/mysql/lib \ 
    --with-mysql-config=/usr/local/mysql/bin/mysql_config 

Quand je lance irb> require 'mysql' j'obtiens l'erreur ci-dessous:

irb(main):001:0> require 'rubygems' 
=> true 
irb(main):002:0> require 'mysql' 
LoadError: libmysqlclient.so.16: cannot open shared object file: 
    No such file or directory - 
    /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so 
    from /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/ 
    custom_require.rb:36:in `require' from (irb):2 

Après quelques recherches sur Google, je trouve que je pouvais utiliser ldconfig pour con figure mysql.so être disponible pour l'ensemble du système. Une fois que j'ajouté "/ usr/local/mysql /lib" /etc/ld.so.conf et a couru ldconfig, il a bien fonctionné:

irb(main):002:0> require 'rubygems' 
=> true 
irb(main):003:0> require 'mysql' 
=> true 

OK, alors je suis à travailler. Mais ma question est, pourquoi avais-je cette erreur? Vous aviez l'habitude de juste gem install mysql et cela fonctionnerait. Quelqu'un d'autre a-t-il rencontré la même erreur? En utilisant ldconfig semble un peu fragile et non maintenable. Y a-t-il une meilleure solution?

Toute idée serait grandement appréciée.

Merci,

Ethan

Répondre

2

J'ai eu aussi des problèmes (sur Mac OS X), et j'étais tout aussi frustré que gem install mysql n'était pas aussi simple comme autrefois. La réponse à courte vue est que la gem mysql a besoin de construire des extensions natives, et pour ce faire, elle a besoin d'informations sur le chemin (spécifiques à votre système) sur les bibliothèques MySQL. La façon la plus fiable d'obtenir cette information est de la fournir.

La réponse la plus large est qu'il s'agit d'un bug de conception dans le système de gemme. Lorsque presque toutes les autres gemmes sont installées avec gem install foo, le système et les fournisseurs de gemmes doivent fournir aux utilisateurs une sorte d'instruction pour les cas exceptionnels importants - même si c'est juste un retour avec le message d'erreur qui vous dit que vous devez fournir plus d'informations pour installer gem, et ce que cette information est.

Un peu de googling autour m'a finalement amené à la réponse, mais m'a beaucoup plus d'instances d'autres personnes aveuglées par un processus simple qui est devenu complexe sans avertissement.

1

Peut-être qu'il avait quelque chose à voir avec le préfixe utilisé lors de l'installation de MySQL? --with-mysql-lib =/usr/local/mysql/lib

Vraisemblablement, si cela a été/usr/local/lib (ou quelque part ldconfig était déjà configuré) et/ou si vous veniez d'utiliser un préfixe de plus haut niveau de quelque chose comme/usr/local, vous n'avez peut-être pas rencontré de problèmes (?)

Questions connexes