Приложение Django не видно

Я пытаюсь развернуть приложение Django в первый раз, используя mod_wsgi с Apache на Ubuntu 12.04 VM. Я читал несколько уроков, особенно блог Аймана Фархата, это отличное видео на YouTube и, конечно, официальную документацию Django.

Это следует за более ранним вопросом, который я разместил здесь, задаваясь вопросом, почему мой опрос Django не просто работал, когда я загрузил его в /var/www/ (краснеть!), С тех пор я изучал mod_wsgi согласно ответам.

Я не уверен, какой этап я пропускаю. Проект может запускаться на сервере через python manage.py runserver без ошибок. Я также побежал python manage.py collectstatic без ошибок.

Затем я перезапустить Apache с

sudo service apache2 restart

Однако, когда я захожу по URL http://phaedrus.scss.tcd.ie/bias_experiment/surveythree/ где я ожидаю увидеть опрос, там ничего нет. Я просто вижу стандартную ошибку 404.

Я действительно не уверен, что я должен делать дальше или почему это не работает.

Ниже приведены мои настройки и то, что я пробовал до сих пор.

ПРИМЕЧАНИЕ: у меня есть проект Bias_Experiment Django, созданный в Pydev. Он имеет три приложения, содержащиеся в src папка.

  • опрос (мой рабочий проект)
  • опросы (учебник, которому я следовал)
  • bias_experiment (корневое приложение с моим файлом настроек и т. д.)

Структура моего проекта

Мой виртуальный хост расположен по адресу /etc/apache2/sites-available/bias_experiment

<VirtualHost *:80>
ServerAdmin admin@email.com
ServerName kdeg-vm-18.scss.tcd.ie
ServerAlias http://collegeserver.ie/bias_experiment
WSGIScriptAlias / var/www/bias_experiment/src/bias_experiment/index.wsgi

Alias /static/ /var/www/bias_experiment/src/bias_experiment/static/
<Location "/static/">
    Options -Indexes
</Location >
</VirtualHost >

Мой файл WSGI находится по адресу /var/www/bias_experiment/src/bias_experiment/index.wsgi

import os
import sys
import site

# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('~/var/www/bias_experiment/lib/python2.7/site-packages')

# Add the app's directory to the PYTHONPATH
sys.path.append('/var/www/bias_experiment')
sys.path.append('/var/www/bias_experiment/src/bias_experiment')

os.environ['DJANGO_SETTINGS_MODULE'] = 'bias_experiment/src/bias_experiment.settings'

# Activate your virtual env
activate_env=os.path.expanduser("~/var/www/bias_experiment/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

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

Мои шаблоны URL от bias_experiment/src/bias_experiment/urls.py

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),        
    url(r'^surveythree/$', SurveyWizard.as_view([SurveyForm1, SurveyForm2, SurveyForm3, SurveyForm4, SurveyForm5])),   
)

1 ответ

Решение

Адрес, по которому вы идете в своем браузере, не соответствует ни директивам ServerName, ни ServerAlias ​​в вашей конфигурации Apache, поэтому виртуальный хост не будет знать, что ответить на этот запрос.

Обратите внимание, что ServerAlias ​​должен быть похож на ServerName - имя хоста, а не URL, без префикса http или пути. Также обратите внимание, что вы можете иметь несколько значений для ServerAlias, если вам нужно, чтобы этот виртуальный хост отвечал на множество имен хостов.

Если вы хотите, чтобы приложение Django обслуживалось в /bias_experiment, это должно быть частью WSGIScriptAlias.

Так и должно быть:

ServerAlias phaedrus.scss.tcd.ie
WSGIScriptAlias /bias_experiment /var/www/bias_experiment/src/bias_experiment/index.wsgi

Также я запутался в расположении вашего кода. Это в /var/www/... или /home/whoever/var/www? Ваш wsgi-файл относится ко второму, но в Apache conf есть первый.

Далее, virtualenv должен позаботиться об установке всех путей Python. Так как вы запускаете скрипт активации, вы можете удалить строки, которые изменяют sys.path и site.addsitedir. Хотя вам может понадобиться сохранить тот, который добавляет src каталог.

Другая проблема связана с вашим DJANGO_SETTINGS_MODULE. Это должен быть модуль Python, а не путь к файлу - на самом деле то, что у вас есть, представляет собой нечто среднее между ними. поскольку src находится на пути Python, вы можете просто установить его в 'bias_experiment.settings'.

Другие вопросы по тегам