FastAPI/Uvicorn微服务启动:配置文件端口未生效问题排查
问题分析与解决方案
核心错误原因
启动方式未触发配置逻辑
当你执行uvicorn main:app时,Uvicorn 直接作为入口加载你的 FastAPI 应用,不会执行if __name__ == "__main__"代码块,因此你读取config.ini的逻辑完全没被运行,Uvicorn 默认使用 8000 端口。代码本身存在语法/逻辑错误
就算你改用python main.py启动,当前代码也无法正常工作:
- 未创建 FastAPI 实例(
app = FastAPI()缺失) asyn拼写错误,应为async- 返回值
value未定义 - 从配置读取的
APP_PORT是字符串类型,Uvicorn 的port参数要求整数 - 变量名对应错误(
APP_NAME绑定了version,APP_VER绑定了appName)
修正后的代码
from fastapi import FastAPI import configparser import uvicorn # 需导入uvicorn模块 # -------------- 配置读取 -------------------- config = configparser.ConfigParser() config.read('configuration/config.ini') # 修正变量名对应关系 APP_NAME = config['application']['appName'] APP_VER = config['application']['version'] APP_DESC = config['application']['description'] APP_PORT = int(config['application']['port']) # 转换为整数类型 # ------------------------------------------- # 创建FastAPI实例,可将配置信息传入文档 app = FastAPI(title=APP_NAME, version=APP_VER, description=APP_DESC) @app.get("/someroute") async def some_func(i: str): # 修正async拼写 return {"input": i} # 定义合法返回值 if __name__ == "__main__": uvicorn.run("main:app", host="127.0.0.1", port=APP_PORT, log_level="debug")
正确启动方式
运行 python main.py,此时会执行 if __name__ == "__main__" 代码块,加载配置文件中的 8001 端口启动服务。
如果坚持要用 uvicorn main:app 命令启动,需手动指定端口(但会失去配置文件统一管理的意义):
uvicorn main:app --port 8001
内容的提问来源于stack exchange,提问作者Far31
相关产品推荐
相关产品推荐

