重点:500错误不是NGINX错误,不是API错误,不是JS/AJAX/HTML错误,而是服务端后台应用错误,即flask应用错误
运行flask需要https server网关,之前已经说到python应用网关常规使用uwsgi,所以配置flask 项目的网关也是使用uwsgi
在服务器上,需要做以下几步:
1、安装uwsgi,pip install uwsgi安装即可
2、安装flask,本地开发的时候pycharm是安装后才加载的flask,pycharm都提供好了,然而第一次部署到服务器上的时候,服务器是没有flask的
所以服务器需要安装flask,pip install flask即可,很多未知的请求500错误,这是排查的第一步
3、启动flask应用方式:
假定我的flask py文件叫app.py
uwsgi --http :9090 --chdir=/data/uwsgi/ -w app:app 可以
uwsgi --http :9090 -w app:app 可以
uwsgi --socket :9090 -w app:app 可以
uwsgi -s /tmp/uwsgi.sock -w app:app 可以
uwsgi --http :9090 --chdir=/data/uwsgi/ --wsgi-file app.py 错误
uwsgi --socket :9090 --chdir=/data/uwsgi/ --wsgi-file app.py 错误
以上多种启动方式,能够正常启动的例如前四种,而后面两张会在请求的时候报错500,分析启动因子:
uwsgi + (启动方式) + (端口)+|(工作目录)...参数| + -w +项目名(去除py后缀):app
以上的启动方式,括号里面的都可以写道配置文件中,最后直接指定配置文件启动
启动方式(必须要):
可以是http直接作为web api请求,可以是socket作为nginx后端api请求,可以是-s把请求类型定义为根据系统socket走
端口(必须要):
用http方式,端口可以ip直接访问,用socket方式,智能访问nginx的端口,nginx会自动跳转到uwsgi服务端口(前提是nginx配置好了)
工作目录/虚拟空间等等:
可以配置可以不配置,大多数情况下不影响启动,因为我后期是用docker跑服务,也算是独立隔离的,所以没有配置这些
项目名:
比如我的是app.py文件,所以叫app,当你的文件时server.py时,项目名叫server,xxx.py时,项目名叫server,xxx
最后的app:
这个app代表的是py文件里面的程序,名叫app,和if __name__ 那里的app.run()的这个app是对应的,默认就是app,一般不需要改
注意:测试请求的时候返回500错误,基本上都是flask程序错误,和uwsgi/nginx没有太多关系
而程序错误排查顺序是:
1、查看uswgi是否有错误日志,如果有,看是否是uswgi错误导致未运行项目
如果是项目错误:
2、python版本是否一致
3、程序依赖是否齐全,比如flask包
4、程序逻辑是否正确
5、最后找不到原因的时候,开启debug和log输出
官方文档里面有定义flask500错误是因为程序有异常而逻辑上没有try跳过异常,则默认会返回500