Nginx
如何在 EC2 上的 nginx 上的 uWSGI 上執行 Django 1.3/1.4(Apache2 工作)
我代表我的管理員發布問題。基本上,他想在安裝在 Amazon EC2 上的 nginx 上的 WSGI 上設置 Django 應用程序(在 Django 1.3 上製作,但將遷移到 Django 1.4,所以我希望這兩個中的哪一個可以工作)。
當使用 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|
使用的範例教程:
- http://projects.unbit.it/uwsgi/wiki/RunOnNginx
- https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/
你知道什麼地方做錯了,或者應該怎麼做才能讓 Django 在 EC2 上的 nginx 上的 uWSGI 上工作?
告訴他從簡單的配置開始,然後調整它們:
http://projects.unbit.it/uwsgi/wiki/Quickstart
只要一個簡單http模式的應用程序執行起來,他就可以開始添加與nginx的集成。
之後,他可以開始真正的調整,添加程序和監控功能。
從我所看到的情況來看,他似乎是從動態模式開始的,這是一個非常複雜的話題(99% 的時間都不需要)
向您的 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。