2015-09-01 82 views
2

围绕uWSGI的工作原理(我正在使用它与Django),我只是不明白。Django - mysite.wsgi - 文件不存在,但uWSGI的作品。怎么样?

我有以下的测试Django项目:

(uwsgi-tutorial)[[email protected] 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 documentation 这样说:

模块:该模块WSGI使用 - 可能mysite.wsgi模块startproject命令创建

模块mysite.wsgi:加载指定的WSGI模块

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

回答

3

张望了一下打后,我似乎明白了什么是真正发生的事情 - 模块Python模块参考,像Python中的进口声明。

我认为uWSGI是一个通用的东西,不绑定到Python,所以它为什么会期望Python模块引用?看起来uWSGI最初是为Python开发的。剩下的选项可以通过--plugins和自定义构建。所以当我通过安装uWSGI时,pip install uwsgi被编译为默认设置,这意味着它需要一个Python模块引用。至少这是我现在的理解。

这样我就可以,例如,重命名wsgi.py的mysite/文件夹放到socool.py,并通过uswgi --http :8000 --module mysite.socool运行我的设置。

如果任何人都可以增加我的答案的清晰度,那将是非常好的。

UPDATE-01:

至少与拱Linux分发存在经由吃豆安装uwsgi系统包之间的差-S uwsgi并用安装Python包PIP安装uwsgi

如果安装了系统软件包,它将不具备开箱即用的Python功能。例如,运行uwsgi --module ...将给出错误,模块选项不受支持。

uwsgi-plugin-python只能在安装后才能使用uWSGI系统包运行Python模块。还有必要指定要使用的插件 - uwsgi --plugins python ...

[[email protected] ~]# uwsgi --help | grep module | wc -l 
0 
[[email protected] ~]# uwsgi --plugins python --help | grep module | wc -l 
23 

突然事实证明,额外的选项出现在帮助输出,并--module现在支持。

希望这可以帮助那些不熟悉uWSGI的人像我一样。

+1

WSGI是一个Python标准。 uWSGI是随后扩展到其他语言的该标准的实现。 –

相关问题