ITPub博客

首页 > 数据库 > 数据库开发技术 > fastapi框架系列-gunicorn+uvicorn 进行部署一个告警问题(factory flag explicitly)

fastapi框架系列-gunicorn+uvicorn 进行部署一个告警问题(factory flag explicitly)

原创 数据库开发技术 作者:程序员小钟同学 时间:2022-02-19 00:00:00 0 删除 编辑
如果有什么问题,欢迎加我好友相互学习交流哟!我也是有很多不懂,希望大佬多多指教!


gunicorn+uvicorn 生产环境部署问题一个告警问题

在重构了我自己心的脚手架的风格之后,进行生产环境的正式部署的时候,一直有一个告警信息输出:告警内容信息如下:

[WARNING] ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.

查阅了相关的资料和对比之前的部署的其实没什么区别,最终主要问题点是在于我们的ASGI app对象没有进行实例化返回引发的问题异常。

问题表现:

app 引入的时候没有进行实例化

from rights.app import create_app

if __name__ == "__main__":
    from framecore.utils.routes_helper import print_all_routes_info
    print_all_routes_info(create_app())
    import uvicorn
    import os
    app_modeel_name = os.path.basename(__file__).replace(".py", "")
    print(app_modeel_name)
    uvicorn.run(f"{app_modeel_name}:create_app", host='0.0.0.0',port=8000,reload=True,workers=3)

部署启动配置:

[program:newsright_api_21110]
command=pipenv run gunicorn main:create_app -b 127.0.0.1:21110 -w 2 -k uvicorn.workers.UvicornWorker   ; supervisord将要执行的运行python服务的命令
directory=/data/www/newrightscharge
stdout_logfile=/data/logs/supervisord/newrightscharge21110.log    ; supervisord当前这个test服务运行产生的日志存储路径,方便我们查看运行情况
socket-timeout=3
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT

问题点:

  • from rights.app import create_app
  • pipenv run gunicorn main:create_app

因为create_app我是一个方法,没有进行调用,所以会引发告警提示,其实没有是实例化也不影响我们的服务的启动,但是只是突然冒出这个告警信息提示,有点不适。在本地开发环境也一样。

查阅uvicorn和gunicorn 关于--factory 参数的说明如下:

  • uvicorn
  • gunicorn

问题处理

方式1:

-- 要么在main 里面进行一次create_app的方法调用,而不只是导入模块,虽然在启动的时候帮帮你进行自动的实例化。如下:

from rights.app import create_app

app = create_app()
if __name__ == "__main__":
    from framecore.utils.routes_helper import print_all_routes_info
    print_all_routes_info(app)
    import uvicorn
    import os
    app_modeel_name = os.path.basename(__file__).replace(".py", "")
    print(app_modeel_name)
    uvicorn.run(f"{app_modeel_name}:app", host='0.0.0.0',port=8000,reload=True,workers=3)

启动配置修改为:

[program:newsright_api_21110]
command=pipenv run gunicorn main:app -b 127.0.0.1:21110 -w 2 -k uvicorn.workers.UvicornWorker   ; supervisord将要执行的运行python服务的命令
> 把 create_app---改为 app

方式2:

只是修改配置文件为:

[group:newsright_online_api]
programs=newsright_api_21110,newsright_api_21111

[program:newsright_api_21110]
command=pipenv run gunicorn main:create_app() -b 127.0.0.1:21110 -w 2 -k uvicorn.workers.UvicornWorker   ; supervisord将要执行的运行python服务的命令
directory=/data/www/newrightscharge
stdout_logfile=/data/logs/supervisord/newrightscharge21110.log    ; supervisord当前这个test服务运行产生的日志存储路径,方便我们查看运行情况
socket-timeout=3
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT

总结

以上仅仅是个人结合自己的实际需求,做学习的实践笔记!如有笔误!欢迎批评指正!感谢各位大佬!

结尾

END

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

公众号:微信搜【程序员小钟同学】

小钟同学 | 文 【欢迎一起学习交流】| QQ:308711822


原文作者:程序员小钟同学;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111703