1 votes

Apache / mod_wsgi / Django ne trouve pas la bibliothèque partagée MySQL

Je suis bloqué sur un cas où les bibliothèques MySQL ne sont pas trouvées sur un serveur Apache/mod_wsgi/Django déployé, bien que Python seul puisse importer la bibliothèque correctement.

Voici les erreurs de mon journal Apache :

[Tue Jul 10 12:52:02 2012] [error] [client 127.0.0.1]   File "/remote/projects1/pdrtke/python/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/utils/importlib.py", line 35, in import_module
[Tue Jul 10 12:52:02 2012] [error] [client 127.0.0.1]     __import__(name)
[Tue Jul 10 12:52:02 2012] [error] [client 127.0.0.1]   File "/remote/projects1/pdrtke/python/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/db/backends/mysql/base.py", line 14, in <module>
[Tue Jul 10 12:52:02 2012] [error] [client 127.0.0.1]     raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
[Tue Jul 10 12:52:02 2012] [error] [client 127.0.0.1] ImproperlyConfigured: Error loading MySQLdb module: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory

J'ai déjà essayé ce qui suit :

  • Vérifiez que l'interpréteur Python peut faire import MySQLdb : Ok
  • Vérifiez que python manage.py ... les actions nécessitant un travail de soutien de la base de données : Ok
  • Vérifiez que LD_LIBRARY_PATH pointe vers un répertoire où libmysqlclient_r.so.16 est disponible : Ok
  • Attachez le httpd processus avec gdb et faire un show env : Le site LD_LIBRARY_PATH Les points suivants libmysqlclient_r.so.16 trop
  • Modifiez le envvars dans le répertoire bin/http pour ajouter un fichier export LD_LIBRARY_PATH=... (juste au cas où) : Ok
  • Contrôle par un ldd libmysqlclient_r.so.16 que la bibliothèque elle-même ne contient pas de dépendances non résolues
  • Vérifiez que le httpd n'a pas le bit setuid activé, ce qui est une raison documentée d'ignorer l'indicateur d'intégrité de l'exécution. LD_LIBRARY_PATH : Ok

Aucune de ces actions ne semble résoudre mon problème. Y a-t-il un élément évident que j'ai oublié de prendre en compte ?

0voto

mably Points 51

C'est maintenant corrigé. C'était une erreur stupide de ma part.

Au départ, j'avais un LD_LIBRARY_PATH sans le bon répertoire donc corrigé, mais... Après avoir changé le LD_LIBRARY_PATH j'ai émis un apachectl restart qui, comme l'indique Apache, ne fait que tuer les processus enfants, et crée de nouveaux enfants à partir du parent existant.

Donc les nouveaux enfants ont continué à avoir l'ancienne version de la LD_LIBRARY_PATH .

Maintenant, je ne suis pas vraiment sûr de comprendre pourquoi j'ai vu le "bon" LD_LIBRARY_PATH avec gdb 's show environment . Mais c'est une autre histoire. Je vais clore ma question initiale, qui est maintenant résolue.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X