在重构了我自己心的脚手架的风格之后,进行生产环境的正式部署的时候,一直有一个告警信息输出:告警内容信息如下:
[WARNING] ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.
查阅了相关的资料和对比之前的部署的其实没什么区别,最终主要问题点是在于我们的ASGI 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
因为create_app我是一个方法,没有进行调用,所以会引发告警提示,其实没有是实例化也不影响我们的服务的启动,但是只是突然冒出这个告警信息提示,有点不适。在本地开发环境也一样。
查阅uvicorn和gunicorn 关于--factory 参数的说明如下:

-- 要么在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
只是修改配置文件为:
[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
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。