我正在尝试部署一个我使用 Python 和 Flask 构建的简单网络应用。
我的应用具有以下结构:
/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 文件应该是什么样子?
最佳答案
您的应用程序有多复杂并不重要。你告诉 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)
关于python - 使用 uwsgi 和 nginx 部署 Flask 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187947/