Apache / mod_wsgi / Django не может найти общую библиотеку MySQL

Я застрял в случае, когда библиотеки MySQL не будут найдены на развернутом сервере Apache/mod_wsgi/Django, хотя только Python может правильно импортировать библиотеку.

Вот мои ошибки в журнале 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

Я уже попробовал следующее:

  • Проверьте, что интерпретатор Python может сделать import MySQLdb Ок
  • Проверь это python manage.py ... действия, требующие поддержки базы данных: Ok
  • Проверь это LD_LIBRARY_PATH указывает на каталог, в котором доступна libmysqlclient_r.so.16: Ok
  • Прикрепить httpd процесс с gdbи сделать show env: LD_LIBRARY_PATH указывает на libmysqlclient_r.so.16 тоже
  • Изменить envvars файл в каталоге bin/http, чтобы добавить export LD_LIBRARY_PATH=... (на всякий случай): ок
  • Проверьте по ldd libmysqlclient_r.so.16 что сама библиотека не содержит неразрешенных зависимостей
  • Проверьте, что httpd исполняемый файл не имеет установленного бита setuid; которая является задокументированной причиной игнорировать LD_LIBRARY_PATH Ок

Ни одно из этих действий не решает мою проблему. Есть ли очевидная вещь, которую я забыл рассмотреть?

1 ответ

Решение

Это сейчас исправлено. Это была глупая ошибка с моей стороны.

У меня изначально был LD_LIBRARY_PATH без хорошего каталога, так что исправили его, но... После изменения LD_LIBRARY_PATHЯ оформил apachectl restart который, как задокументировано Apache, убивает только дочерние процессы и порождает новых потомков от существующего родителя.

Таким образом, новые дети продолжали иметь старую версию LD_LIBRARY_PATH,

Теперь я не совсем понимаю, почему я видел "хороший" LD_LIBRARY_PATH с gdb"s show environment, Но это другая история. Я закрою свой первоначальный вопрос, который сейчас решен.

Другие вопросы по тегам