Nginx

如何在 EC2 上的 nginx 上的 uWSGI 上執行 Django 1.3/1.4(Apache2 工作)

  • October 19, 2013

我代表我的管理員發布問題。基本上,他想在安裝在 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|

使用的範例教程:

你知道什麼地方做錯了,或者應該怎麼做才能讓 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。

引用自:https://serverfault.com/questions/376327