Проблемы с Django + mod-wsgi + psycopg2

Итак, я впервые пытаюсь запустить 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 - _psycopg.so. Нет файла tz.py, и я думаю, что это проблема.

Пожалуйста посоветуй.

P.S. Я использую buildout и djangorecipe для развертывания Django. Я запускаю сценарий сборки с пользователем buildout. Хотя не уверен, имеет ли это смысл.

P.P.S, psycopg2 установлен правильно, потому что я могу запускать syncdb.


person Andrey Fedoseev    schedule 27.01.2010    source источник
comment
Что происходит, когда вы используете интерпретатор и делаете from psycopg2 import tz?   -  person Keryn Knight    schedule 27.01.2010
comment
Все работает нормально, если я из psycopg2 импортирую tz из интерпретатора. Как я уже сказал, я могу запустить syncdb, поэтому psycopg2 установлен правильно.   -  person Andrey Fedoseev    schedule 28.01.2010
comment
попробуйте установить os.environ ['PYTHON_EGG_CACHE'] = '/ tmp' в django.wsgi и посмотрите, имеет ли это значение.   -  person Bear    schedule 29.01.2010
comment
Установка os.environ ['PYTHON_EGG_CACHE'] = '/ tmp' не помогает, результат тот же. Я вижу, что каталог /tmp/psycopg2-2.0.13-py2.5-linux-i686.egg-tmp/psycopg2/ создан только с одним файлом _psycopg.so (без tz.py)   -  person Andrey Fedoseev    schedule 01.02.2010
comment
Зачем вам искать файл с именем tz.py, если вы знаете, что уже можете успешно импортировать его из интерпретатора? Что произойдет, если вы выполните chmod на 7777, чтобы каждый и их собака потенциально могли выполнять и записывать файлы?   -  person Keryn Knight    schedule 03.02.2010


Ответы (2)


Хорошо, я нашел решение. Я использовал системный питон для сборки, и он уже имел psycopg2 в пакетах сайтов. Похоже, возник какой-то конфликт между psycopg2 в системных пакетах сайтов и установленным buildout. Я создал виртуальную среду Python и использовал ее для сборки. И это помогло! Больше никаких ошибок импорта.

person Andrey Fedoseev    schedule 04.02.2010

Я бы предположил, что если вы можете импортировать его из командной строки, то где-то вверх по пути пользователю www-data запрещен доступ к пути яйца.

person Keryn Knight    schedule 28.01.2010