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 < / strong>启用&#34;魔法&#34;。
大多数uWSGI + Django指南,包括官方Django 1.8 documentation 说出类似的话:
模块:要使用的WSGI模块 - 可能 startite 创建的 mysite.wsgi 模块
或
模块 mysite.wsgi :加载指定的wsgi模块
我不明白它是如何工作的以及为什么它以这种方式工作。谁能解释一下? :)提前致谢!
答案 0 :(得分:5)
在玩了一下之后,我似乎已经理解了实际发生了什么 - 模块是 Python模块参考,就像 import < Python中的/ strong>语句。
我认为uWSGI是一个通用的东西,并不依赖于Python,所以为什么它会期望Python模块引用呢?看起来uWSGI最初是为Python开发的。其余选项可通过--plugins和自定义构建获得。因此,当我通过 pip安装uwsgi安装uwsGI时,使用默认设置编译了uwsGI,这意味着它需要Python模块参考。至少这是我现在理解的方式。
例如,我可以将 mysite / 文件夹中的 wsgi.py 重命名为 socool.py ,并通过{{运行我的设置1}}。
如果有人可以为我的回复添加清晰度,那就太棒了。
<强> UPDATE-01:强>
至少在Arch Linux发行版中,通过 pacman -S uwsgi 安装的 uwsgi 系统包与使用 pip install uwsgi <安装的Python包之间存在差异/强>
如果安装了系统软件包,它将不具备开箱即用的Python功能。例如,运行uswgi --http :8000 --module mysite.socool
会出现错误,模块选项不受支持。
只有在安装 uwsgi-plugin-python 之后才能使用uWSGI系统包来运行Python模块。此外,还需要指定要使用的插件 - uwsgi --module ...
。
uwsgi --plugins python ...
突然发现帮助输出中出现了额外的选项,现在支持 - 模块。
希望这有助于那些不熟悉uWSGI的人。