fix(deploy): #2129 watchtower 自动部署兜底幂等 alembic 迁移 #2129
Reference in New Issue
Block a user
Delete Branch "fix/2129-watchtower-auto-migrate"
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?
根因
staging 爆款视频 analyze-images/history 返回 500 INTERNAL_ERROR 的根因:watchtower 自动部署只 restart 容器,不跑 CI deploy 脚本里的
alembic upgrade head;而 staging/prod 关闭了AUTO_CREATE_SCHEMA,启动时_ensure_viral_video_columns不会执行,导致 PR #2124 (v1.6) 新增的 5 列(copy_result/voice_id/voice_source/video_ratio/video_model)在 DB 里缺失,任何 SQLAlchemy 读写viral_video_jobs都会 500。同时
GET /api/v1/tts/presets401 是前端 ViralVideoPage.tsx 用裸fetch('/api/v1/tts/presets', { credentials: 'include' })没带 Authorization Bearer,后端该接口需要登录态;已在 PR #2128 (5226680) 改为通过 apiClient 调用voices/presets。修复
entrypoint-api.sh:容器启动先幂等执行alembic upgrade head,失败仅告警不阻塞 uvicorn(已有列不受影响)。支持显式 CMD 透传:CI 用docker run/ compose run ... sh -c '...'时仍先跑迁移再执行传入命令,行为与现有脚本兼容。entrypoint-worker.sh同步加 alembic 步骤:避免 worker 先于 API 启动时 Celery task 读新列报错。alembic.ini和migrations/,缺alembic/env.py与alembic/versions/,容器内alembic命令根本无法执行。ENTRYPOINT替换原CMD,entrypoint 内部exec uvicorn ...。验证
docker run ... sh -c 'cd /app && alembic upgrade head'会在 entrypoint 里再跑一次(幂等),然后 exec sh -c 继续走老流程RUN_MIGRATIONS=1路径也会多跑一次 alembic(幂等,不报错)测试计划
POST /viral-video/analyze-images、GET /viral-video/history应返回 200🚀 预览环境已部署
🗑️ 预览环境已清理
PR #2129 已关闭或合并,对应的预览环境已被清理。