Files
autoclip/docs/incomplete_projects_fix_summary.md

4.5 KiB
Raw Blame History

未完成项目重试问题修复总结

问题描述

用户报告有两个未完成的项目,点击重试后依然无法重启:

  1. 项目1: 19cdeea4-16fb-49ce-b114-54cdff7419cd (iPhone 17/Pro/Air Impressions)
  2. 项目2: e11ab97b-6dd2-4d50-97c6-d934b835232c (成为up主的43天我拍了部电影)

问题分析

项目1问题分析

  • 视频文件存在 (42.5MB)
  • 有18个重复的任务记录
  • 项目状态为失败
  • 多个Celery任务ID冲突
  • 流水线代码中存在变量作用域问题

项目2问题分析

  • 没有视频文件
  • 项目状态为等待中
  • 需要重新下载B站视频
  • ⚠️ 源URL: https://www.bilibili.com/video/BV1ihbYzGErq/

修复措施

1. 修复流水线变量作用域问题

问题: cannot access local variable 'timeline_data' where it is not associated with a value

修复: 在 backend/services/simple_pipeline_adapter.py 中修复变量初始化问题

# 修复前当没有大纲数据时timeline_data变量未定义
else:
    logger.warning("没有大纲数据,跳过时间线提取和内容评分")
    # 创建空文件...

# 修复后:初始化所有必要的变量
else:
    logger.warning("没有大纲数据,跳过时间线提取和内容评分")
    # 创建空文件...
    # 初始化空变量
    timeline_data = []
    scored_clips = []
    titled_clips = []
    collections = []

2. 清理重复任务

问题: 项目1有18个重复的任务记录导致冲突

修复: 创建了 scripts/fix_incomplete_projects.py 脚本

  • 删除重复的任务记录
  • 保留最新的任务记录
  • 清理Celery任务ID冲突

3. 实现自动重新下载功能

问题: 项目2没有视频文件需要重新下载

修复: 修改 backend/api/v1/projects.py 中的重试API

  • 检测视频文件是否存在
  • 从项目元数据中获取源URL
  • 根据URL类型自动选择下载方式B站/YouTube
  • 使用安全的任务管理器启动下载任务
# 检查视频文件是否存在,如果不存在则尝试重新下载
if not video_path.exists():
    logger.warning(f"视频文件不存在: {video_path},尝试重新下载")
    
    # 检查项目元数据中是否有源URL
    if hasattr(project, 'project_metadata') and project.project_metadata:
        source_url = project.project_metadata.get('source_url')
        if source_url:
            # 根据URL类型选择下载方式
            if 'bilibili.com' in source_url:
                # B站视频重新下载
                # ...
            elif 'youtube.com' in source_url or 'youtu.be' in source_url:
                # YouTube视频重新下载
                # ...

4. 改进异常处理

修复: 使用 backend/api/v1/async_task_manager.py 安全任务管理器

  • 防止未捕获异常导致后端重启
  • 提供任务状态跟踪
  • 支持任务取消和清理

修复结果

项目1修复结果

  • 清理了重复任务
  • 修复了流水线变量作用域问题
  • 重试功能正常工作
  • 可以重新启动处理

项目2修复结果

  • 实现了自动重新下载功能
  • 检测到源URL并开始重新下载
  • 使用安全的任务管理器
  • 支持B站和YouTube视频重新下载

测试验证

创建了测试脚本

  1. scripts/check_incomplete_projects.py - 检查未完成项目
  2. scripts/fix_incomplete_projects.py - 修复项目问题
  3. scripts/test_retry_api.py - 测试重试API
  4. scripts/test_bilibili_redownload.py - 测试B站重新下载

测试结果

  • 项目1重试功能正常
  • 项目2自动重新下载功能正常
  • 流水线变量作用域问题已修复
  • 重复任务清理功能正常

改进效果

修复前的问题:

  • 项目重试失败
  • 流水线处理异常
  • 重复任务冲突
  • 无法自动重新下载

修复后的效果:

  • 项目重试功能正常
  • 流水线处理稳定
  • 任务管理清晰
  • 自动重新下载功能完善

技术要点

  1. 变量作用域管理: 确保所有变量在使用前都被正确初始化
  2. 任务去重: 清理重复任务,避免冲突
  3. 自动重新下载: 智能检测缺失文件并自动重新下载
  4. 异常处理: 使用安全的任务管理器防止未捕获异常
  5. API改进: 重试API现在支持自动重新下载功能

后续建议

  1. 监控项目处理进度,确保修复效果
  2. 定期清理重复任务,避免积累
  3. 完善错误日志,便于问题排查
  4. 考虑添加任务队列管理功能