Python支持

应用字典

你可以使用应用字典机制来避免在配置中设置你的应用。

  1. import uwsgi
  2. import django.core.handlers.wsgi
  3.  
  4. application = django.core.handlers.wsgi.WSGIHandler()
  5.  
  6. def myapp(environ, start_response):
  7. start_response('200 OK', [('Content-Type', 'text/plain')])
  8. yield 'Hello World\n'
  9.  
  10. uwsgi.applications = {
  11. '': application,
  12. '/django': 'application',
  13. '/myapp': myapp
  14. }

将这个Python模块名 (即,它应该是可导入的,并且没有 .py 扩展名)传递给uWSGI的 module / wsgi 选项,uWSGI将会为URL前缀/可回调映射搜索 uwsgi.applications 字典。

每一个项的值可以使一个可回调对象,或者字符串类型的名字。

Virtualenv支持

virtualenv 是一种机制,它允许你彼此隔离一个 (或多个) Python应用的库 (当不使用uWSGI时,还有解释器)。任何可敬的现代Python应用都应该使用virtualenv。

快速入门

  • 创建你的virtualenv:
  1. $ virtualenv myenv
  2. New python executable in myenv/bin/python
  3. Installing setuptools...............done.
  4. Installing pip.........done.
  • 安装所有所需的模块 (以 Flask 为例):
  1. $ ./myenv/bin/pip install flask
  2. $ # Many modern Python projects ship with a `requirements.txt` file that you can use with pip like this:
  3. $ ./myenv/bin/pip install -r requirements.txt
  • 将你的WSGI模块拷贝到这个新环境中 (如果你不想要修改你的 PYTHONPATH,那就是在 lib/python2.x 之下)。

注解

对于许多部署而言,应用运行在virtualenv之外是常见的。如何配置它尚未有文档说明,但是它可能非常容易。

使用 home/virtualenv 选项 (简称 -H)来运行uwsgi服务器:

  1. $ uwsgi -H myenv -s 127.0.0.1:3031 -M -w envapp

Python 3

WSGI规范随着 PEP3333 为Python 3进行了更新。

一个主要的改变时应用必须响应 bytes 实例,而非 (Unicode) 字符串到WSGI栈。

你应该对字符串进行编码,或者使用bytes literal:

  1. def application(environ, start_response):
  2. start_response('200 OK', [('Content-Type', 'text/plain')])
  3. yield 'Hello '.encode('utf-8')
  4. yield b'World\n'

Paste支持

If you are a user or developer of 如果你是Paste兼容的框架(例如 Pyramid, PylonsTurbogears 或者使用它们的应用)的用户或开发者,那么你可以使用uWSGI —paste 选项来方便地部署应用。

例如,如果你有一个位于 /opt/tg2env 的虚拟环境,包含一个名为 addressbook 的Turbogears应用,并把它配置在了 /opt/tg2env/addressbook/development.ini:

  1. uwsgi --paste config:/opt/tg2env/addressbook/development.ini --socket :3031 -H /opt/tg2env

就这样!无需编写额外的配置或者Python模块。

警告

如果你设置多个进程/worker (master mode) ,那么你将收到一个错误:

  1. AssertionError: The EvalException middleware is not usable in a multi-process environment

在这种情况下,你将必须把你的paste配置文件中的 debug 选项设置为False —— 或者恢复到单进程环境。

Pecan支持

如果你是 Pecan WSGI框架的用户或开发者,那么你可以使用uWSGI的 —pecan 选项来方便地部署应用。

例如,如果你有一个位于 /opt/pecanenv 的虚拟环境,包含一个名为 addressbook 的Pecan应用,并把它配置在了 /opt/pecanenv/addressbook/development.py:

  1. uwsgi --pecan /opt/pecanenv/addressbook/development.py --socket :3031 -H /opt/pecanenv

警告

如果你设置多个进程/worker (master 模式),那么你将收到一个错误:

  1. AssertionError: The DebugMiddleware middleware is not usable in a multi-process environment

在这种情况下,你将必须把你的Pecan配置文件中的 debug 选项设置为False —— 或者恢复到单进程环境。

使用Django应用django-uwsgi

首先,你需要从https://github.com/unbit/django-uwsgi获取``django_uwsgi`` app (一旦它在发行的django目录中)。

通过pip install django-uwsgi安装,并且将其添加到你的INSTALLED_APPS中。

  1. INSTALLED_APPS = (
  2. # ...
  3. 'django.contrib.admin',
  4. 'django_uwsgi',
  5. # ...
  6. )

然后相应地修改urls.py。例如:

  1. # ...
  2. url(r'^admin/uwsgi/', include('django_uwsgi.urls')),
  3. url(r'^admin/', include(admin.site.urls)),
  4. # ...

确保将django_uwsgid的URL模式放在admin site的模式之前,否则将永远匹配不上它。

然后,``/admin/uwsgi/``将提供uWSGI静态文件,并且有一个优雅重载服务器(当运行在Master之下时)的按钮。注意,只有在启用了memory-report选项的情况下,才会报告内存使用情况。

阅读django-uwsgi位于rtfd.org <http://django-uwsgi.rtfd.org/>的文档_