2014-02-04 4 views
0

Вчера я разместил этот 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, все безрезультатно. Я застрял в этой проблеме в течение трех дней. Любая помощь будет очень оценил. Спасибо!

+0

Что такое макет каталога, существует ли файл с именем '' wsgiapp'' в модуле? – gipi

ответ

0

Я повторил мой процесс настройки линии для линии на моем сервере Linode и не имел никаких проблем. Я должен предположить, что эта проблема имеет что-то делать то, как настроены экземпляры AWS EC2, pr в отношении безопасности. Единственное изменение, которое я сделал, это связать с портом 127.0.0.1:8000. Мне нужно будет создать сущность для моих файлов, чтобы показать другим, как я это сделал, если кому-то это интересно.

Смежные вопросы