Я застрял в случае, когда библиотеки 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
Я уже пробовал следующее:
import MySQLdb
: Хорошоpython manage.py ...
действия, требующие работы поддержки базы данных: ХорошоLD_LIBRARY_PATH
указывает на каталог, в котором доступен libmysqlclient_r.so.16: Хорошоhttpd
процесс с gdb
, и сделать show env
: The LD_LIBRARY_PATH
указывает на libmysqlclient_r.so.16
слишкомenvvars
файл в каталоге bin / http, чтобы добавить export LD_LIBRARY_PATH=...
(на всякий случай): Хорошоldd libmysqlclient_r.so.16
что сама библиотека не содержит неразрешенных зависимостейhttpd
исполняемый файл не имеет установленного бита setuid; что является документированной причиной игнорировать LD_LIBRARY_PATH
: ХорошоКажется, ни одно из этих действий не решило мою проблему. Есть ли очевидная вещь, которую я забыл учесть?
Теперь это исправлено. Это была моя глупая ошибка.
У меня изначально был LD_LIBRARY_PATH
без хорошего каталога, так что исправил, но ... После изменения LD_LIBRARY_PATH
, Я выпустил apachectl restart
который, как описано в Apache, убивает только дочерние процессы и порождает новых дочерних процессов от существующего родителя.
Таким образом, новые дети сохранили старую версию LD_LIBRARY_PATH
.
Я не совсем понимаю, почему я увидел "хороший" LD_LIBRARY_PATH с gdb
с show environment
. Но это другая история. Закрою свой первоначальный вопрос, который теперь решен.