【问题标题】:Problems with Django + mod-wsgi + psycopg2Django + mod-wsgi + psycopg2 的问题
【发布时间】: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


【解决方案1】:

好的,我找到了解决方案。我已经使用系统 python 进行构建,并且它已经在站点包中具有 psycopg2。系统站点包中的 psycopg2 与 buildout 安装的 psycopg2 之间似乎存在某种冲突。我已经建立了一个虚拟 python 环境并将其用于构建。这有帮助!没有更多的导入错误。

【讨论】:

    【解决方案2】:

    我建议如果你能够从命令行导入它,那么在路径的某个地方,www-data 用户将被禁止访问 egg 路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2018-03-05
      • 2012-02-16
      • 2011-01-21
      相关资源
      最近更新 更多