From af87f1deb036dc08f86b8c1e6ac123a7843a84c5 Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 9 Aug 2026 22:26:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(backend):=20approval.py=20+=20byod.py=20?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20settings.create=5Fredis=5Fclient()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #3 (commit 9292f41) 引入的回归:get_redis() 用 `from app.main import redis_client`, 但 redis_client 是 lifespan 函数内的局部变量,永远不可跨模块导入。 冒烟测试:ImportError: cannot import name 'redis_client' from 'app.main' → 整个 approval 模块加载失败,所有审批路由 500 修复:改用 settings.create_redis_client() 自建连接(与 approval_webhook.py:_writeback_agent_todo 同款)。 byod.py 同样问题,预防性一并修复(避免 byod 模块首次被访问时再炸)。 实测: - POST /approval/callback → HTTP 200 {errcode:0} - GET /byod/eligible-positions → HTTP 200 (845B) --- src/backend/app/api/approval.py | 9 ++++++--- src/backend/app/api/byod.py | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/backend/app/api/approval.py b/src/backend/app/api/approval.py index 1e2c154..085d2d2 100644 --- a/src/backend/app/api/approval.py +++ b/src/backend/app/api/approval.py @@ -90,9 +90,12 @@ APPROVAL_SP_STATUS_TODO_STATUS: Dict[int, str] = { # Redis客户端(依赖注入) async def get_redis() -> aioredis.Redis: - """获取Redis客户端依赖""" - from app.main import redis_client - return redis_client + """获取Redis客户端依赖 + + 使用 settings.create_redis_client() 自建连接,而非从 app.main 导入 redis_client + (后者是 lifespan 函数内的局部变量,不可跨模块导入)。 + """ + return settings.create_redis_client() # ============================================================================= diff --git a/src/backend/app/api/byod.py b/src/backend/app/api/byod.py index 8e63ea3..efe31fd 100644 --- a/src/backend/app/api/byod.py +++ b/src/backend/app/api/byod.py @@ -24,9 +24,12 @@ router = APIRouter() # Redis客户端(依赖注入) async def get_redis() -> aioredis.Redis: - """获取Redis客户端依赖""" - from app.main import redis_client - return redis_client + """获取Redis客户端依赖 + + 使用 settings.create_redis_client() 自建连接,而非从 app.main 导入 redis_client + (后者是 lifespan 函数内的局部变量,不可跨模块导入)。 + """ + return settings.create_redis_client() # =============================================================================