From 5f04f3283fcd9ac3926b6d5afd7d595750a2b1a4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 26 Aug 2026 08:32:19 -0600 Subject: [PATCH] =?UTF-8?q?fix(=E9=83=A8=E7=BD=B2):=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E9=82=A3=E6=AD=A5=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=90=8D=E5=86=99?= =?UTF-8?q?=E6=88=90=E4=BA=86=20api=EF=BC=8C=E5=AE=9E=E9=99=85=E6=98=AF=20?= =?UTF-8?q?oj-api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `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 --- docker/deploy.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/deploy.sh b/docker/deploy.sh index 822c493..49fdd14 100755 --- a/docker/deploy.sh +++ b/docker/deploy.sh @@ -188,9 +188,12 @@ fi say "数据库迁移" "${COMPOSE[@]}" run --rm \ -e OJ2_ALLOW_DESTRUCTIVE="${OJ2_ALLOW_DESTRUCTIVE:-}" \ - api oj2-api migrate \ - || die "迁移没通过,已中止部署(旧容器还在跑,没动过)。 -上面的输出说明了原因。破坏性迁移需要 OJ2_ALLOW_DESTRUCTIVE=1 显式放行。" + oj-api oj2-api migrate \ + || die "迁移没通过,已中止部署(容器没动过)。**原因看上面 migrate 自己的输出**, +它对每种情况都打印了具体该做什么,别照搬下面这几条猜。常见的三种: + · 破坏性语句被拦 → 确认备份后 OJ2_ALLOW_DESTRUCTIVE=1 docker/deploy.sh + · 缺迁移基线记录 → 按它打印的 SQL 插一行 + · 连不上库 → 自带数据形态下 postgres 是否起来了、DATA_DIR 对不对" say "起栈" "${COMPOSE[@]}" up -d