Джанго WGSI пути - PullRequest
       12

Джанго WGSI пути

5 голосов
/ 16 ноября 2010

У меня проблемы с настройкой wgsi с django. Я слежу за этим http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/. Тем не менее, я до сих пор не совсем понимаю, куда поместить файл .wsgi и нужно ли мне устанавливать sys.path. Я пробовал это как непосредственно снаружи, так и внутри корня сети, и я не могу заставить работать что-либо, как ожидалось.

# /home/ben/public_html/django_test/testproject/apache/django.wsgi:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'testproject.settings'

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

Relivant apache conf:

DocumentRoot "/home/ben/public_html/django_test/testproject/"
WSGIScriptAlias / "/home/ben/public_html/django_test/testproject/apache/django.wsgi"

Ошибка журналов Apache (стандартная страница apache 500):

ImportError: Could not import settings 'testproject.settings' (Is it on sys.path? ...

Я могу при получении django хотя бы выдать свою ошибку, используя это:

import os
import sys

path = '/home/ben/public_html/django_test/testproject'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

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

, которая привела к этой странице ошибки django:

ImportError at /admin/
No module named testproject.urls

Ответы [ 4 ]

8 голосов
/ 16 ноября 2010

Я поставил wsgi на тот же уровень, что и settings.py, и выглядит так:

import os
import sys

sys.path.insert(0,os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2]))


os.environ['DJANGO_SETTINGS_MODULE'] = 'yourprojectname.settings'

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

это файл apache conf:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName www.yourprojectname.com
    Alias /media/ /home/diegueus9/workspace/yourprojectname/media/

    <Directory /home/diegueus9/workspace/yourprojectname/media/>
        Order deny,allow
        Allow from all
    </Directory>

    WSGIScriptReloading On
    WSGIDaemonProcess yourprojectname 
    WSGIProcessGroup yourprojectname
    WSGIApplicationGroup yourprojectname
    WSGIPassAuthorization On

    WSGIScriptAlias / /home/diegueus9/workspace/yourprojectname/yourfile.wsgi
    ErrorLog /var/log/apache2/yourprojectname-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel debug

    CustomLog /var/log/apache2/yourprojectname-access.log combined

</VirtualHost>
1 голос
/ 16 ноября 2010

Как быстрое решение, вы можете добавить его к sys.path:

path = '/home/ben/public_html/django_test/testproject'

также добавьте это:

path2 = '/home/ben/public_html/django_test'

Вы также можете изменить путь Python в вашем Apache VirtualHost:

WSGIDaemonProcess [...] python-path=/home/ben/public_html/django_test

Но вы также должны просмотреть документы mod_wsgi и узнать, что там советует Грэм Дамплтон.

1 голос
/ 16 ноября 2010

Вот хороший учебник , в котором показано, как использовать mod_wsgi с Django, а также некоторые другие предметы, не связанные с этим вопросом.

0 голосов
/ 03 мая 2015

Я потратил несколько часов на устранение этой самой проблемы, и мое исправление было SELinux, которое запрещало доступ к моей папке /django/.

Чтобы проверить, блокирует ли SEStatus ваш доступ, просмотрите журнална /var/log/audit/audit.log

Мое исправление было простым:

restorecon -R /var/www/django/
...