FLASK部署服务器,Ajax请求报错500 解决思路

重点: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

你可能感兴趣的:(python,uWSGI)