fix(部署): 迁移那步的服务名写成了 api,实际是 oj-api
Some checks failed
Deploy / deploy (push) Has been cancelled

`docker compose run ... api oj2-api migrate` 直接报 `no such service: api`。
compose 里六个服务全带 oj- 前缀(oj-api / oj-worker / oj-web / oj-judge /
oj-postgres / oj-redis),没有叫 api 的。

顺带修掉失败提示:原来不管迁移因为什么失败,都说「破坏性迁移需要
OJ2_ALLOW_DESTRUCTIVE=1 显式放行」——而这次的真实原因是服务名不存在,
提示把人往完全错误的方向带。现在改成让人去看 migrate 自己的输出
(它对每种情况都打印了具体该做什么),只把三种常见原因列成线索。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-26 08:32:19 -06:00
parent 19054718d5
commit 5f04f3283f

View File

@@ -188,9 +188,12 @@ fi
say "数据库迁移" say "数据库迁移"
"${COMPOSE[@]}" run --rm \ "${COMPOSE[@]}" run --rm \
-e OJ2_ALLOW_DESTRUCTIVE="${OJ2_ALLOW_DESTRUCTIVE:-}" \ -e OJ2_ALLOW_DESTRUCTIVE="${OJ2_ALLOW_DESTRUCTIVE:-}" \
api oj2-api migrate \ oj-api oj2-api migrate \
|| die "迁移没通过,已中止部署(容器还在跑,没动过)。 || die "迁移没通过,已中止部署(容器没动过)。**原因看上面 migrate 自己的输出**
上面的输出说明了原因。破坏性迁移需要 OJ2_ALLOW_DESTRUCTIVE=1 显式放行。" 它对每种情况都打印了具体该做什么,别照搬下面这几条猜。常见的三种:
· 破坏性语句被拦 → 确认备份后 OJ2_ALLOW_DESTRUCTIVE=1 docker/deploy.sh
· 缺迁移基线记录 → 按它打印的 SQL 插一行
· 连不上库 → 自带数据形态下 postgres 是否起来了、DATA_DIR 对不对"
say "起栈" say "起栈"
"${COMPOSE[@]}" up -d "${COMPOSE[@]}" up -d