Вчера я разместил этот question, на который никто не мог ответить, поэтому я продолжил работу над ним и решил создать простейший возможный сценарий. Теперь я пытаюсь запустить приложение Django (1.6) по умолчанию (отображает «Это сработало!») С использованием Gunicorn (v. 18) в качестве моего HTTP-сервера и Nginx (v. 1.4.1) в качестве моего обратного прокси. Они работают на экземпляре AWS EC2 (Ubuntu Server 13.10). Когда я пытаюсь запустить Gunicorn, я получаю эту ошибку:Django and Gunicorn не разговаривает
Starting testdj as ubuntu
Traceback (most recent call last):
File "/home/ubuntu/venv/testdj/bin/gunicorn", line 9, in <module>
load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
File "/home/ubuntu/venv/testdj/local/lib/python2.7/site-packages/pkg_resources.py", line 353, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/home/ubuntu/venv/testdj/local/lib/python2.7/site-packages/pkg_resources.py", line 2302, in load_entry_point
return ep.load()
File "/home/ubuntu/venv/testdj/local/lib/python2.7/site-packages/pkg_resources.py", line 2029, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named app.wsgiapp
Я установил Nginx и gunicorn с помощью APT. Я также установил virtualenv и virtualenvwrapper и запускаю Django в виртуальной среде. Я запускаю приложение в качестве пользователя EC2 по умолчанию «ubuntu». Приложение Django «testdj» находится в/usr/share/nginx/html/testdj, а ubuntu владеет деревом каталогов. Я не изменил файл wsgi.py по умолчанию Django.
Вот мой «старт-gunicorn» Сценарий:
#!/bin/bash
NAME="testdj"
DJANGODIR=/usr/share/nginx/html/testdj
USER=ubuntu
GROUP=ubuntu
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=testdj.settings
DJANGO_WSGI_MODULE=testdj.wsgi
WORKON_HOME=/home/ubuntu/venv
source `which virtualenvwrapper.sh`
workon $NAME
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGO_DIR:$PYTHONPATH
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--access-logfile /var/log/gunicorn/access.log \
--error-logfile /var/log/gunicorn/error.log \
--log-level=debug \
--bind=0.0.0.0:8000
Вот мой Nginx виртуальный хост-файл конфигурации:
upstream app_server {
# For a TCP configuration:
server 0.0.0.0:8000 fail_timeout=0;
}
server {
listen 80 default;
server_name _;
client_max_body_size 4G;
keepalive_timeout 5;
root /usr/share/nginx/html/testdj/static;
location/{
# checks for static file, if not found proxy to app
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /usr/share/nginx/html/testdj/static;
}
}
Теперь, что интересно, что я создал этот test.py файл и поместить его на верхнем уровне моего каталога приложения Django:
# -*- coding: utf-8 -
def app(environ, start_response):
"""Simplest possible application object"""
data = 'Hello, world!!\n'
status = '200 OK'
response_headers = [
('Content-type', 'text/plain'),
('Content-Length', str(len(data)))
]
start_response(status, response_headers)
return iter([data])
Затем я управлял командой «guny» orn --bind = 0.0.0.0: 8000 test: app ", и я могу увидеть выход" Hello, world ", поэтому я знаю, что nginx и gunicorn и файл Python говорят. Просто он не разговаривает с Джанго. Я подумал, что, возможно, проблема в том, что я установил gunicorn глобально (с APT), и это заставило его не найти файл app.wsgiapp, поэтому я также установил gunicorn в виртуальную среду. Однако это не устранило проблему. Нет ничего в моей переменной PYTHONPATH (мне никогда не приходилось иметь что-либо в этом случае с другими приложениями Django.
Кто-нибудь знает, что я делаю неправильно? Должны быть тысячи сайтов, на которых работает Django с nginx и Gunicorn, и они работают. Что я делаю неправильно? Я прочитал все документы Gunicorn, досье Django на WSGI и многочисленные статьи о Gunicorn и nginx, все безрезультатно. Я застрял в этой проблеме в течение трех дней. Любая помощь будет очень оценил. Спасибо!
Что такое макет каталога, существует ли файл с именем '' wsgiapp'' в модуле? – gipi