使用uwsgi和nginx部署Flask应用程序

3

我想部署一个我用Python和Flask构建的简单Web应用程序。

我的应用程序结构如下:

/var/www/watchgallery/
    + app
        + __init__.py
        + views.py
        + templates
    + flask #virtual environment for Flask
    + run.py #script I used in my machine to start the development Flask server
    + watchgallery_nginx.conf
    + watchgallery_uwsgi.ini
    + watchgallery_uwsgi.sock

为了部署目的,我正在按照这个链接进行操作:http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/ 在这个教程中,Flask应用程序只包含一个hello.py文件。他配置uwsgi文件的方式如下(/var/www/demoapp/demoapp_uwsgi.ini):
[uwsgi]
#application's base folder
base = /var/www/demoapp

#python module to import
app = hello
module = %(app)

home = %(base)/venv
pythonpath = %(base)

#socket file's location
socket = /var/www/demoapp/%n.sock

#permissions for the socket file
chmod-socket    = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

#location of log files
logto = /var/log/uwsgi/%n.log

我尝试将相同的逻辑应用到我的uwsgi.ini文件上,但是我做错了什么。这是我的文件样子:

[uwsgi]
#application's base folder
base = /var/www/watchgallery

#python module to import
app = run
module = %(app)

home = %(base)/flask
pythonpath = %(base)

#socket file's location
socket = /var/www/watchgallery/%n.sock

#permissions for the socket file
chmod-socket    = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

当我在本地开发应用程序时,我运行以下命令启动服务器:./run.py

这是我的run.py文件:

#!flask/bin/python
from app import app
app.run(debug = False)

现在,我的问题是:鉴于我的Flask应用程序不止一个文件,我的uwsgi.ini文件应该是什么样子的?
1个回答

4
无论你的应用有多么复杂,只需告诉uWSGI入口在哪里,其余内容将正常通过Python导入进行处理。
在您的情况下,入口是module = %(app)callable = app。因此,uWSGI将加载该模块并将请求发送到可调用的Flask应用程序。
现在,由于请求需要由uWSGI而不是Flask的服务器提供服务,所以您不需要app.run(debug=False)代码行。但是,您可以使用以下技巧使开发和生产代码相同:
#!flask/bin/python

from app import app

if __name__ == "__main__":
    app.run(debug = False)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接