Приложение 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'.