在使用uWSGI(我正在与Django一起使用)时,它的工作原理有些神奇,但我却不太理解。
我有一个如下的测试Django项目:
(uwsgi-tutorial)[root@localhost mysite]# tree
.
|-- db.sqlite3
|-- manage.py
|-- mysite
| |-- __init__.py
| |-- __pycache__
| | |-- __init__.cpython-34.pyc
| | |-- settings.cpython-34.pyc
| | |-- urls.cpython-34.pyc
| | `-- wsgi.cpython-34.pyc
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- test.py
在这个文件夹里,我运行了
uwsgi --http :8000 --module mysite.wsgi
。程序可以正常运行。为什么呢?
也就是说,并不存在 mysite.wsgi 这个文件,但是却有 mysite/wsgi.py。如果我运行
uwsgi --http :8000 --module mysite/wsgi.py
,程序会出现错误(HTTP 500)。如果我将 mysite.wsgi 改成其他的,那么 uWSGI 就无法加载模块。所以看起来,模块名必须与 Django 项目名称匹配,并且必须添加 .wsgi 才能启用“魔法”。
大多数 uWSGI+Django 指南,包括官方的Django 1.8 文档 都会说一些类似于: module: 使用的 WSGI 模块 - 可能 是 startproject 创建的mysite.wsgi 模块。 或者 modulemysite.wsgi: 加载指定的 wsgi 模块。 我不理解它的工作原理,以及它为什么能这样工作。有谁能够解释一下吗?谢谢!