我想部署一个简单的Web应用程序,我已经使用Python和Flask构build。
我的应用程序有以下结构:
/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
文件。 他configurationuwsgi文件的方式就像这样(/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)
现在,我的问题是:我的uwsgi.ini文件应该如何看起来像我的Flask应用程序包含多个单个文件?
不要紧,你的应用程序有多复杂。 你告诉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)