上一版把补发写成 `bun src/scripts/backfill-problemset-badges.ts`,那在生产上根本执行 不了 —— api 镜像是 debian-slim + 一个编译好的 oj2-api,既没有 bun 也没有源码。 改成 main.ts 的子命令,跑法对齐 migrate(deploy.sh:197 就是这个形态): docker compose -f docker/compose.debian.yml run --rm oj-api oj2-api backfill-badges docker compose -f docker/compose.debian.yml run --rm oj-api oj2-api backfill-badges --apply 脚本本身从「导入即执行」改成导出一个返回退出码的函数,main.ts 负责解析参数和 exit。 package.json 的 backfill:badges 也指向同一入口,本机和生产走的是同一条代码路径。 用编译出来的二进制在 /tmp 下实跑过全部四条路径(预演 / --apply 后自动复核 / 重复跑 幂等 / 误发时拒绝执行并退 1,加 --allow-revoke 才收回),确认动态 import 的模块进了 bundle、不依赖源码树。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqqZwxtXLo2GTqMi51C94D
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
"worker": "bun src/main.ts worker",
|
||||
"build": "bun build --compile --target=bun-linux-x64 src/main.ts --outfile ../../dist/oj2-api",
|
||||
"seed:dev": "bun src/scripts/seed-dev.ts",
|
||||
"backfill:badges": "bun src/scripts/backfill-problemset-badges.ts",
|
||||
"backfill:badges": "bun src/main.ts backfill-badges",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"check:routes": "bun src/scripts/check-route-shadowing.ts",
|
||||
"db:pull": "drizzle-kit pull",
|
||||
|
||||
Reference in New Issue
Block a user