我遇到了这样一种情况,即在 Apache/mod_wsgi/Django 部署的服务器上找不到 MySQL 库,尽管仅 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 ...
需要数据库支持的操作是否有效:好的 - 检查
LD_LIBRARY_PATH
指向 libmysqlclient_r.so.16 可用的目录:好的 - 附上
httpd
过程gdb
,并做一个show env
:LD_LIBRARY_PATH
要点libmysqlclient_r.so.16
- 修改
envvars
bin/http目录下的文件添加一个export LD_LIBRARY_PATH=...
(以防万一):Ok - 通过 a 检查
ldd libmysqlclient_r.so.16
库本身不包含未解决的依赖项 - 检查
httpd
可执行文件没有设置 setuid 位;这是忽略的有据可查的理由LD_LIBRARY_PATH
:好的
这些操作似乎都无法解决我的问题。有什么明显的事情我忘了考虑吗?