sys.path не может найти модуль настроек на apache - PullRequest
2 голосов
/ 10 декабря 2010

Я использую виртуальный env с mod_wsgi и django.

Я установил свой виртуальный env в '/ home / project_name'

Я не могу заставить apache найти мои settings.py.Есть идеи?

Мой wsgi выглядит так:

import os
import sys
# put the Django project on sys.path
path = '/home/project_name/lib/python2.6/site-packages'
if path not in sys.path:
    sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

, а мой файл виртуального хоста apache выглядит так:

    WSGIScriptAlias / /home/project_name/releases/current/project_name/wsgi-scripts/project_name.wsgi
    <Directory /home/project_name/releases/current/project_name/wsgi-scripts>
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/access.log combined

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Путь, который вы хотите добавить в sys.path (если его там нет) - это папка НАД папкой вашего проекта django. Вместо того, чтобы выкорчевать все это, чтобы найти вашу конкретную проблему, я использовал сценарий установки WSGI, который облегчает любое жесткое кодирование пути, как у вас, и значительно упрощает настройку / развертывание. У меня есть подкаталог с именем «apache» в основной папке моих проектов с одним файлом только django.wsgi. Следующим образом ...

/djangoproject
    __init__.py
    settings.py
    ...
    /apache
        django.wsgi

В django.wsgi приведенный ниже скрипт переносится на любой другой проект с той же папкой проекта apache, просто меняя префикс строки модуля настроек ...

import os
import sys

apache_dir = os.path.dirname(__file__)
project = os.path.dirname(apache_dir)
workspace = os.path.dirname(project)
if workspace not in sys.path:
    sys.path.append(workspace)

os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoproject.settings'
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

Apache vhosts настроен следующим образом ...

...

WSGIScriptAlias / /var/www/sitename/djangoproject/apache/django.wsgi
WSGIDaemonProcess djp_wsgi user=myusername group=admin processes=1 threads=10
WSGIProcessGroup djp_wsgi

<Directory /var/www/sitename/djangoproject/apache/>
    Order deny,allow
    Allow from all
</Directory>

...

Надеюсь, это поможет, у меня никогда не было проблем с этим конфигом. Еще одно примечание: имя папки apache и имя файла django.wsgi могут быть названы практически как угодно, эти конкретные имена - именно то, что я выбрал.

0 голосов
/ 10 декабря 2010

Могут быть разные причины, в основном связанные с разрешениями. Посмотрите эту презентацию и прочитайте слайды о возможностях.

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

...