Ai_GirlFriend/xuniYou/任务382不存在分析.md
2026-03-02 18:57:11 +08:00

3.3 KiB
Raw Blame History

任务382不存在分析

问题现象

从截图看到任务382的请求但API查询返回"任务不存在"。

可能的原因

1. 任务已被删除

  • 任务可能在失败后被清理
  • 数据库中可能有定期清理机制

2. 任务ID不匹配

  • 截图中显示的可能是其他类型的任务ID
  • generation_task表中可能没有ID为382的记录

3. 数据库连接问题

  • API连接的数据库与实际不同
  • 配置文件中的数据库URL可能不一致

4. 任务类型不匹配

  • 任务382可能不是唱歌类型的任务
  • API查询时可能有类型过滤

排查步骤

步骤1: 直接查询数据库

-- 检查任务382是否存在
SELECT * FROM generation_task WHERE id = 382;

-- 如果不存在,查看最近的任务
SELECT id, task_type, status, error_msg, created_at 
FROM generation_task 
ORDER BY id DESC 
LIMIT 20;

-- 查看最近的失败任务
SELECT id, task_type, status, error_msg, created_at 
FROM generation_task 
WHERE status = 'failed'
ORDER BY id DESC 
LIMIT 10;

步骤2: 检查应用日志

从截图中可以看到的日志信息:

  • 15:30:25.730 - 请求成功返回200
  • 15:30:25.923 - 请求成功返回200
  • 15:30:26.026 - 请求成功返回200
  • 15:30:26.026 - 视频生成成功
  • 15:30:30.196 - 请求成功返回200
  • 15:30:30.196 - 视频生成失败
  • 15:30:30.213 - 任务2次失败

看起来有多个任务在处理任务382可能已经被处理完成或失败。

步骤3: 查看实际的任务ID

从日志中提取实际的任务ID

# 在日志文件中搜索
grep "generation_task_id" lover/logs/*.log | tail -20

解决方案

方案1: 查询最新的失败任务

-- 查询最新的失败任务
SELECT 
    id,
    user_id,
    lover_id,
    status,
    error_msg,
    JSON_EXTRACT(payload, '$.song_title') as song_title,
    created_at
FROM generation_task
WHERE status = 'failed'
AND task_type = 'sing'
ORDER BY created_at DESC
LIMIT 5;

方案2: 重新生成视频

如果任务已被删除,可以:

  1. 重新选择歌曲
  2. 重新提交生成请求
  3. 确保用户有足够的视频生成次数

方案3: 检查日志文件

# 查看最近的错误日志
Get-Content lover\logs\app.log -Tail 100 | Select-String "failed|error|382"

建议

  1. 先执行SQL查询确认任务382是否真的存在
  2. 如果不存在,查看最近的失败任务
  3. 根据实际的错误信息进行针对性处理
  4. 如果是偶发问题,可以直接重新生成

常见失败原因

根据代码分析,唱歌视频生成可能失败的原因:

  1. 用户次数不足: video_gen_remaining <= 0
  2. 恋人不存在: 恋人被删除或未创建
  3. 恋人无形象: lover.image_url 为空
  4. 歌曲不存在: 歌曲被下架或删除
  5. 性别不匹配: 歌曲性别与恋人性别不符
  6. 内容安全: EMO检测未通过或内容审核失败
  7. API调用失败: DashScope API错误
  8. 网络问题: 下载音频/图片失败
  9. FFmpeg错误: 视频处理失败
  10. OSS上传失败: 无法上传到对象存储

下一步

请执行以下命令查看实际情况:

# 连接数据库
mysql -u root -prootx77 fastadmin

# 执行查询
SELECT id, status, error_msg, created_at FROM generation_task ORDER BY id DESC LIMIT 10;