Skip to content

[Bug] 本地环境初始化后 D1 schema 缺失字段,且提示的 schema reconcile 无对应执行方式 #72

@Asakushen

Description

@Asakushen

[Bug] 本地环境初始化后 D1 schema 缺失字段,且提示的 schema reconcile 无对应执行方式

🐛 问题描述

在按照标准流程克隆项目并在本地进行初始化时,执行完基础的 D1 数据库迁移(00010009)后启动本地开发服务器,后端会报 500 内部错误。

报错日志提示 posts 表缺少 series_slug 等分类相关的字段,并要求“请先运行 schema reconcile”。但在 server/package.jsonscripts 中并没有找到对应的 reconcile 命令。此外,项目默认的配置文件及代码逻辑中,环境变量 AUTO_SCHEMA_MIGRATION 似乎默认为 "false",导致应用启动时无法自动补齐字段,造成了本地部署的死循环。

🔁 复现步骤

  1. 克隆项目:git clone https://github.com/one-ea/Monolith.git
  2. 安装依赖:cd Monolith && npm install
  3. 进入 server 目录并应用基础迁移:cd server && npm run db:migrate:local
  4. 启动本地开发服务:npm run dev
  5. 终端出现 500 错误循环报错。

✅ 期望行为

执行完 db:migrate:local 并在本地运行 npm run dev 后,项目能够正常启动。如果存在需要动态对齐的 Schema,期望能够:

  1. 提供例如 npm run db:reconcile 这样的显式脚本命令。
  2. 或者在初始化文档/.dev.vars.example 中补充明确的指引,告知本地开发需要配置 AUTO_SCHEMA_MIGRATION="true"

❌ 实际行为

项目启动后持续抛出 500 错误,终端核心报错信息如下:
[ERROR] Error: D1 schema 未就绪,缺少列:posts.series_slug, posts.series_order, posts.category。请先运行 schema reconcile。

🖥️ 环境信息

  • 浏览器:与浏览器无关 (后端启动错误)
  • 操作系统:Windows
  • 部署环境:本地开发 (Wrangler local)
  • Node/NPM 版本:v24.4.0 & 11.4.2
  • Wrangler 版本:4.85.0

📝 补充信息

目前的临时解决办法有以下两种,供参考以修复此逻辑闭环:

  1. 方案 A:手动在本地的 .dev.vars 中配置环境变量,强制开启 ORM 的自动同步:AUTO_SCHEMA_MIGRATION="true"
  2. 方案 B:手动通过 wrangler d1 execute 对本地库执行 ALTER TABLE 补充这三个缺失的字段:
npx wrangler d1 execute monolith-db --local --command="ALTER TABLE posts ADD COLUMN series_slug TEXT;"
npx wrangler d1 execute monolith-db --local --command="ALTER TABLE posts ADD COLUMN series_order INTEGER;"
npx wrangler d1 execute monolith-db --local --command="ALTER TABLE posts ADD COLUMN category TEXT;"

建议作者在 package.json 中暴露 reconcile 脚本,或者将这三个字段直接补充到最新的 .sql 迁移文件中,以提升新用户的本地初始化体验。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions