Django - mysite.wsgi - 文件不存在,但uWSGI工作。怎么样?

时间:2015-09-01 01:33:51

标签: python django uwsgi

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模块

我不明白它是如何工作的以及为什么它以这种方式工作。谁能解释一下? :)提前致谢!

1 个答案:

答案 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的人。