【发布时间】:2010-01-27 11:56:47
【问题描述】:
所以我第一次尝试让 Django 使用 mod-wsgi 运行。我已经按照示例中所示配置了 Apache,并且我很确定我做的一切都是正确的。
我没有设置PYTHON_EGG_CACHE 变量,所以它使用默认值:/var/www/.python-eggs。我已经创建了这个目录并使它对用户www-data 可写。
当我打开网站时,它会显示来自 500.html 模板的输出,这是我在日志中得到的:
...
File "/usr/local/.../parts/django/django/db/__init__.py", line 17, in load_backend
return import_module('.base', 'django.db.backends.%s' % backend_name)
File "/usr/local/.../parts/django/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/local/.../parts/django/django/db/backends/postgresql_psycopg2/base.py", line 22, in <module>
raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
ImproperlyConfigured: Error loading psycopg2 module: cannot import name tz
这是我在/var/www/.python-eggs/ 中的内容
# ls -la /var/www/.python-eggs/
total 12
drwxr-xr-x 3 www-data www-data 4096 Jan 27 04:19 .
drwxr-xr-x 5 root root 4096 Jan 27 04:18 ..
drwxr-xr-x 3 www-data www-data 4096 Jan 27 04:19 psycopg2-2.0.13-py2.5-linux-i686.egg-tmp
# ls -la /var/www/.python-eggs/psycopg2-2.0.13-py2.5-linux-i686.egg-tmp/psycopg2/
total 368
drwxr-xr-x 2 www-data www-data 4096 Jan 27 04:19 .
drwxr-xr-x 3 www-data www-data 4096 Jan 27 04:19 ..
-rwxr-xr-x 1 www-data www-data 363318 Jan 22 03:44 _psycopg.so
psycopg2 egg 目录中唯一的文件是_psycopg.so。没有tz.py 文件,我认为这是问题所在。
请指教。
P.S.,我使用 buildout 和 djangorecipe 来部署 Django。我使用buildout 用户运行构建脚本。不知道这是否有意义。
P.P.S,psycopg2 已正确安装,因为我能够运行 syncdb。
【问题讨论】:
-
当您使用解释器并执行“from psycopg2 import tz”时会发生什么?
-
如果我从解释器执行“从 psycopg2 导入 tz”,一切正常。正如我所说,我能够运行 syncdb,因此 psycopg2 已正确安装。
-
尝试在 django.wsgi 中设置 os.environ['PYTHON_EGG_CACHE'] = '/tmp' 看看是否有效果。
-
设置 os.environ['PYTHON_EGG_CACHE'] = '/tmp' 没有帮助,结果是一样的。我看到目录 /tmp/psycopg2-2.0.13-py2.5-linux-i686.egg-tmp/psycopg2/ 仅使用一个文件 _psycopg.so (no tz.py)
-
当您知道您已经可以从解释器成功导入时,为什么还要寻找一个名为 tz.py 的文件?如果你 chmod 到 7777 会发生什么,这样每个人和他们的狗都可以执行和写入文件?
标签: django apache2 mod-wsgi psycopg2