Python支持
应用字典
你可以使用应用字典机制来避免在配置中设置你的应用。
- import uwsgi
- import django.core.handlers.wsgi
- application = django.core.handlers.wsgi.WSGIHandler()
- def myapp(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/plain')])
- yield 'Hello World\n'
- uwsgi.applications = {
- '': application,
- '/django': 'application',
- '/myapp': myapp
- }
将这个Python模块名 (即,它应该是可导入的,并且没有 .py
扩展名)传递给uWSGI的 module
/ wsgi
选项,uWSGI将会为URL前缀/可回调映射搜索 uwsgi.applications
字典。
每一个项的值可以使一个可回调对象,或者字符串类型的名字。
Virtualenv支持
virtualenv 是一种机制,它允许你彼此隔离一个 (或多个) Python应用的库 (当不使用uWSGI时,还有解释器)。任何可敬的现代Python应用都应该使用virtualenv。
快速入门
- 创建你的virtualenv:
- $ virtualenv myenv
- New python executable in myenv/bin/python
- Installing setuptools...............done.
- Installing pip.........done.
- 安装所有所需的模块 (以 Flask 为例):
- $ ./myenv/bin/pip install flask
- $ # Many modern Python projects ship with a `requirements.txt` file that you can use with pip like this:
- $ ./myenv/bin/pip install -r requirements.txt
- 将你的WSGI模块拷贝到这个新环境中 (如果你不想要修改你的
PYTHONPATH
,那就是在lib/python2.x
之下)。
注解
对于许多部署而言,应用运行在virtualenv之外是常见的。如何配置它尚未有文档说明,但是它可能非常容易。
使用
home
/virtualenv
选项 (简称-H
)来运行uwsgi服务器:
- $ uwsgi -H myenv -s 127.0.0.1:3031 -M -w envapp
Python 3
WSGI规范随着 PEP3333 为Python 3进行了更新。
一个主要的改变时应用必须响应 bytes
实例,而非 (Unicode) 字符串到WSGI栈。
你应该对字符串进行编码,或者使用bytes literal:
- def application(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/plain')])
- yield 'Hello '.encode('utf-8')
- yield b'World\n'
Paste支持
If you are a user or developer of 如果你是Paste兼容的框架(例如 Pyramid, Pylons 和 Turbogears 或者使用它们的应用)的用户或开发者,那么你可以使用uWSGI —paste
选项来方便地部署应用。
例如,如果你有一个位于 /opt/tg2env
的虚拟环境,包含一个名为 addressbook
的Turbogears应用,并把它配置在了 /opt/tg2env/addressbook/development.ini
:
- uwsgi --paste config:/opt/tg2env/addressbook/development.ini --socket :3031 -H /opt/tg2env
就这样!无需编写额外的配置或者Python模块。
警告
如果你设置多个进程/worker (master mode) ,那么你将收到一个错误:
- 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
:
- uwsgi --pecan /opt/pecanenv/addressbook/development.py --socket :3031 -H /opt/pecanenv
警告
如果你设置多个进程/worker (master 模式),那么你将收到一个错误:
- 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
中。
- INSTALLED_APPS = (
- # ...
- 'django.contrib.admin',
- 'django_uwsgi',
- # ...
- )
然后相应地修改urls.py
。例如:
- # ...
- url(r'^admin/uwsgi/', include('django_uwsgi.urls')),
- url(r'^admin/', include(admin.site.urls)),
- # ...
确保将django_uwsgid的URL模式放在admin site的模式之前,否则将永远匹配不上它。
然后,``/admin/uwsgi/``将提供uWSGI静态文件,并且有一个优雅重载服务器(当运行在Master之下时)的按钮。注意,只有在启用了memory-report
选项的情况下,才会报告内存使用情况。
阅读django-uwsgi位于rtfd.org <http://django-uwsgi.rtfd.org/>的文档
_