fix: 统一封面管道增加cover_url多步fallback查找,修复500错误 #1373
Reference in New Issue
Block a user
Delete Branch "fix/cover-500-cover-url-fallback"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
PR #1372 部署后,封面自动生成仍报 500。
根因
统一封面管道(PR #1371)在
generation_cover.py中只通过generation_task_id查找GenerationTask.cover_url。但generation_task_id为空时(如 plan 创建时未关联),直接 fall through 到run_generate_cover()→_call_ai_cover_service()对ai_frame类型抛出RuntimeError→ 路由捕获后返回 500。实际数据验证:staging DB 中 plan
70958bad的generation_task_id为空,但该用户的预览任务(7d4fdf11)有cover_url。修复
统一封面管道增加 3 步 fallback 查找 cover_url(与视频 URL 查找一致的逻辑):
generation_task_id直接查找source_edit_plan_id查找关联预览任务user+template兜底查找所有步骤都找不到 cover_url 时返回 400(而非 500),提示用户重新生成预览视频以触发封面自动提取
新增 3 个单元测试覆盖新 fallback 路径
变更文件
apps/api/app/api/routes/generation_cover.py— 统一封面管道多步 fallback (+78 -16)tests/unit/test_generation_cover.py— 新增 3 个测试 + 更新 3 个已有测试验收标准
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/api/app/api/routes/generation_cover.py: 236] 性能优化建议
步骤 B中调用了gen_task_repo.list_by_source_edit_plan(plan_id)。根据测试用例TestSourceEditPlanFallback的注释 "Both video lookup (step 2.5) and cover_url lookup (step B) use this" 可知,该方法在同一个请求流程中可能被调用两次(一次用于查找视频,一次用于查找封面)。建议在函数作用域或上层逻辑中缓存该查询结果,避免重复查询数据库。[apps/api/app/api/routes/generation_cover.py: 225, 244, 263] 异常处理优化
except Exception捕获所有异常。虽然这在“降级/回退”管道中可以保证后续步骤执行,但会掩盖数据库连接错误、模型属性错误等程序异常。建议细化异常捕获范围(如捕获特定数据库异常),或者在日志中记录更详细的错误堆栈以便排查问题。✅ 良好实践
getattr(task, "cover_url", "")等方式安全访问属性,有效避免了因模型字段缺失导致的 AttributeError。✅ 格式检查通过 | ✅ 逻辑审查通过 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-15 03:36:28 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1373 已关闭或合并,对应的预览环境已被清理。