Django и Apache Issue - PullRequest
       16

Django и Apache Issue

3 голосов
/ 15 июля 2010

Я пытаюсь заставить Django и Apache работать вместе, используя Mod_wsgi, и в настоящее время я получаю следующие ошибки:

[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Target WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py' cannot be loaded as Python module.
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Exception occurred processing WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py'.
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] Traceback (most recent call last):
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73]   File "/home/webdev/websites/virtualenvs/polaris/polaris_project.py", line 8, in <module>
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73]     import django.core.handlers.wsgi
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] ImportError: No module named django.core.handlers.wsgi

Мой Apache Conf выглядит как

Alias /polaris_django/media/ "/home/webdev/websites/virtualenvs/polaris/polaris/static/"
WSGIScriptAlias /polaris_django /home/webdev/websites/virtualenvs/polaris/polaris_project.py
WSGIApplicationGroup %{GLOBAL}

<Directory "/home/webdev/websites/virtualenvs/polaris">
        Order deny,allow
        Allow from all
</Directory>

Мой файл Mod_WSGi выглядит как

import os, sys

sys.path.append('/home/webdev/websites/virtualenvs/polaris')
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/apps')
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/extra_settings')
os.environ['DJANGO_SETTINGS_MODULE'] = 'polaris.settings'
print >> sys.stderr, sys.path
import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Как мне заставить Apache правильно обслуживать Django?

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

Похоже, что вы используете virtualenv - вам нужно активировать его в скрипте WSGI, чтобы правильно настроить пути.

activate_this = os.path.join("path/to/my/virtualenv", "bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
2 голосов
/ 15 июля 2010

Похоже, Django не на вашем пути ... вы можете опубликовать значение вашего sys.path?

1 голос
/ 16 июля 2010

Где установлен Django? Из командной строки Python сделать:

import django
print django.__file__

Если он не установлен в соответствующий каталог на sys.path в /usr/lib/python2.6 или /usr/local/lib/python2.6, то это проблема.

Предполагается, что вы фактически установили Django, это может произойти из-за того, что у вас установлено несколько версий Python, и вы использовали версию, отличную от той, которую использует mod_wsgi для установки Django. Или вы использовали виртуальную среду и не сказали mod_wsgi, где это находится. Или вам удалось установить Django с разрешениями, которые Apache не может прочитать.

Пойдите, посмотрите видео разговора и прочитайте слайды, на которые ссылаются:

http://blog.dscpl.com.au/2010/06/sydney-pycon-modwsgi-talk-slides.html

Они охватывают этот вид проблемы, а также много других вещей, связанных с разрешениями и т. Д.

1 голос
/ 15 июля 2010

Я предполагаю, что apache использует либо другую версию python, либо использует другой sys.path.Что вы получаете в качестве вывода для sys.path?

...