From 2c5bceb826f6416f083034ef14354cca58a4cb0d Mon Sep 17 00:00:00 2001 From: imbytecat Date: Fri, 24 Apr 2026 20:43:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E7=AB=AF=E5=88=B0=E7=AB=AF?= =?UTF-8?q?=E8=B7=91=E9=80=9A=E7=BC=96=E8=AF=91=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=20+=20docker=20compose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 端到端验证时发现 4 处细节,一起补上: 1. bin.ts 漏了 default: 'serve'——CMD ["./server"] 会直接吐 help 而 不是起服务(在 compose 里 app 立刻 exit)。citty 原生支持 default 2. Dockerfile 在 bun install 之前就要 COPY patches/,否则 package.json 的 patchedDependencies 找不到补丁文件,install 失败 3. drizzle/ 目录在仓库里必须存在(带 .gitkeep),否则 Dockerfile 末尾 COPY drizzle/ 到运行镜像会失败 4. migrate.ts 之前只检查 ./drizzle 目录是否存在就跳过——空目录时仍会 进到 drizzle 的 readMigrationFiles,报 Can't find meta/_journal.json。 改成检查 meta/_journal.json 是否存在,更准确地区分"还没生成过迁移" 与"有迁移待应用" 验证路径: - docker compose up -d --build → migrate 完成退出 → app 健康 - curl /api/spec.json → 200,OpenAPI 文档含 todo.{list,create,update,remove} --- Dockerfile | 1 + bin.ts | 1 + drizzle/.gitkeep | 0 src/cli/migrate.ts | 5 +++-- 4 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 drizzle/.gitkeep diff --git a/Dockerfile b/Dockerfile index 803e914..d615b1e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,7 @@ FROM oven/bun:1.3.13 AS build WORKDIR /app COPY package.json bun.lock ./ +COPY patches ./patches RUN bun install --frozen-lockfile COPY . . diff --git a/bin.ts b/bin.ts index 7d35551..67bb8bc 100644 --- a/bin.ts +++ b/bin.ts @@ -11,6 +11,7 @@ const main = defineCommand({ version, description: 'Fullstack server binary (default subcommand: serve)', }, + default: 'serve', subCommands: { serve: () => import('./src/cli/serve').then((m) => m.default), migrate: () => import('./src/cli/migrate').then((m) => m.default), diff --git a/drizzle/.gitkeep b/drizzle/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/cli/migrate.ts b/src/cli/migrate.ts index 9e38358..a79e870 100644 --- a/src/cli/migrate.ts +++ b/src/cli/migrate.ts @@ -2,6 +2,7 @@ import { existsSync } from 'node:fs' import { defineCommand } from 'citty' const MIGRATIONS_FOLDER = './drizzle' +const JOURNAL = `${MIGRATIONS_FOLDER}/meta/_journal.json` export default defineCommand({ meta: { @@ -9,8 +10,8 @@ export default defineCommand({ description: 'Apply pending database migrations from ./drizzle', }, async run() { - if (!existsSync(MIGRATIONS_FOLDER)) { - console.log(`No ${MIGRATIONS_FOLDER} directory; nothing to apply (use db:push in dev).`) + if (!existsSync(JOURNAL)) { + console.log(`No migrations found at ${MIGRATIONS_FOLDER} (run \`bun run db:generate\` to create some).`) return }