068e97d6fc
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 16s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1627h30m56s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1627h30m59s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1627h30m59s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1627h30m59s
CI/CD Pipeline / Build Production Runtime Images (pull_request) Failing after 1627h31m1s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Failing after 1627h31m1s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
## 根因分析 ### 问题 1(P0 紧急):Worker 端上传后 URL 校验永远失败 **现象**:所有生成任务在 OSS 上传后失败,报 "OSS 上传后 URL 不可访问"。 **根因**: 用裸 URL 直接发起 HEAD 请求, 私有 bucket 下永远返回 403,导致所有生成任务失败。 **修复**: - 校验前先调用 生成预签名 URL - 预签名 URL 校验也失败时,降级用 确认上传成功 (上传成功本身就是最可靠的凭证) ### 问题 2:Worker 端 oss_bucket() endpoint 无 scheme **根因**: 的 直接使用环境变量中的 endpoint(如 ),不传 scheme。 oss2 SDK 在这种情况下 sign_url 会默认生成 HTTP URL。 **修复**:endpoint 不带 scheme 时自动补 ,与 API 端 storage.py 的修复保持一致。 ### 问题 3:API 端 results 接口返回裸 URL? **排查结论:API 端代码逻辑正确,不是后端 bug。** 接口确实调用了 ,预签名 URL 放在 字段返回。 字段保留原始 URL(设计如此)。 如果前端拿不到预签名 URL,可能原因: 1. 前端使用了 而非 字段 2. staging API 尚未部署含 HTTPS 修复的最新代码 3. OSS 凭证未配置导致 bucket=None,走 fallback 返回裸 URL (日志中会有 warning) ## 新增函数 - Worker 端生成预签名 URL 的统一入口 - 自动从完整 URL 提取 storage key - 失败时返回 None(不抛异常) ## 测试 新增 10 个单元测试: - oss_bucket endpoint scheme 修复(4 个) - get_signed_download_url 功能(4 个) - upload_to_oss 返回 HTTPS URL(2 个) 测试结果:10/10 passed