Я задаю вопрос от имени своего администратора. По сути, он хочет установить приложение Django (созданное на Django 1.3, но будет переходить на Django 1.4, поэтому я надеюсь, не имеет значения, какое из этих двух будет работать) на WSGI на nginx, установленном на Amazon EC2.
Приложение работает правильно, когда используется сервер разработки Django (с ./manage.py runserver 0.0.0.0:8080
например), также корректно работает Apache. Единственная проблема связана с nginx, и похоже, что что-то не так с конфигурацией nginx / WSGI или Django.
Его описание таково:
Сервер настроен согласно многим руководствам, но, к сожалению, Nginx и uWSGI по-прежнему не работают с приложением.
ProjectName.py:
import os, sys, wsgi
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ProjectName.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Запускаю uWSGI по команде:
uwsgi -x /etc/uwsgi/apps-enabled/projectname.xml
XML файл:
<uwsgi>
<chdir>/home/projectname</chdir>
<pythonpath>/usr/local/lib/python2.7</pythonpath>
<socket>127.0.0.1:8001</socket>
<daemonize>/var/log/uwsgi/proJectname.log</daemonize>
<processes>1</processes>
<uid>33</uid>
<gid>33</gid>
<enable-threads/>
<master/>
<vacuum/>
<harakiri>120</harakiri>
<max-requests>5000</max-requests>
<vhost/>
</uwsgi>
В логах от uWSGI:
*** no app loaded. going in full dynamic mode ***
В логах от Nginx:
XXX.com [pid: XXX|app: -1|req: -1/1] XXX.XXX.XXX.XXX () {48 vars in 989 bytes} [Date] GET / => generated 46 bytes in 77 m
secs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)
added /usr/lib/python2.7/ to pythonpath.
Traceback (most recent call last):
File "./ProjectName.py", line 26, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named wsgi
unable to load app SCRIPT_NAME=XXX.com|
Примеры использованных учебных пособий:
Вы хоть представляете, что было сделано неправильно или что нужно сделать, чтобы Django работал с uWSGI на nginx на EC2?
Добавьте еще несколько строк конфигурации в свой uwsgi.xml, вот версия yaml из одного из моих проектов:
uwsgi:
uid: 33
gid: 33
socket: /webapps/<project_name>/run/uwsgi-socket
logto: /webapps/<project_name>/logs/uwsgi.log
pidfile: /webapps/<project_name>/run/uwsgi.pid
touch-reload: /webapps/<project_name>/run/reload
enable-threads: true
single-interpreter: true
thread: 3
master: true
chdir: /webapps/<project_name>
env: DJANGO_SETTINGS_MODULE=<project_name>.settings.production
module: <project_name>.wsgi
virtualenv: /webapps/.virtualenvs/<project_name>
Похоже, вам не хватает разделов env и module. Вы также можете рассмотреть вариант virtualenv.
Скажите ему, чтобы он начал с простых конфигураций, а затем настроил их:
http://projects.unbit.it/uwsgi/wiki/Quickstart
Как только приложение в простом режиме http заработает, он может начать добавлять интеграцию с nginx.
После этого он может приступить к реальной настройке, добавляя процессы и функции мониторинга.
Из того, что я вижу, похоже, что он начинает в динамическом режиме, что является действительно сложной темой (и в 99% случаев не требуется).