fix(entities): 场景功能的真正根因 —— Scene 未注册进 ENTITIES(v0.7.4)
部署 v0.7.3 后,/health 的 scenes.error 给出决定性线索: No metadata for "Scene" was found. src/entities/index.ts 的 ENTITIES 一直漏了 Scene: export const ENTITIES = [Asset, Song, Motion, CharacterModel, ReviewRecord]; TypeORM 只按 ENTITIES 注册 metadata,漏注册的后果极其隐蔽: - 启动完全正常(DI 可解析、/health 正常、migrationsPending 0); - 迁移也正常(AddScenes 已执行,表其实是建好的); - 但第一次查 Scene 就抛 No metadata,于是 /api/scenes、/api/catalog/export、 /api/catalog/version、/api/reviews?status=pending 全部 500 → 客户端拉不到任何目录、管理端待审列表打不开。 即:此前"数据库缺 scenes 表"的判断也是错的(v0.7.3 的降级与诊断脚本因此仍然值得保留 —— 它们把"场景坏了"限制成"场景不可用",而不是整站不可用)。 修复:ENTITIES 加入 Scene 并导出。 新增静态防线 test/entities-registry.spec.ts(4 项):扫描 src/entities/*.entity.ts 里的 @Entity() 类并逐一与 ENTITIES 对账(漏一个即失败)、检查无重复/无多余、核对 AddScenes 迁移文件存在。已做反向验证:把 Scene 从 ENTITIES 移除后该测试立刻失败。 这类缺陷既过得了 tsc、也过得了启动冒烟(应用能启动),只能靠静态核对兜住。 文档:README.md/.txt 增加 v0.7.4 修订说明;tasks/015-scene-management.md 增 「缺陷修复记录四」;开发文档 §4.12 补「新增实体必须加入 ENTITIES」的硬性要求。 验证:npm run verify 通过(23 文件 / 285 项测试 + 契约/路由/版本一致 + 启动冒烟); 发布产物 opendance-web-v0.7.4.tar.gz sha256 e680c23fc382b6c39498608ea0154f8f80e9e6b5c13518f0f88095644ce88fe1。
This commit is contained in:
@@ -10,7 +10,30 @@ OpenDance Studio **阶段一**: Web 管理服务端(NestJS + TypeORM + 现有 My
|
||||
|
||||
## 状态
|
||||
|
||||
**阶段一已完成**: T-WEB-001 -> T-WEB-016 全部落地,当前版本 **v0.7.3**(契约 `rest-api 0.5.0`、`websocket-keypoints 0.2.0`、`data-models 0.7.0`、`model-formats 0.5.0`、`skeleton-topology 0.2.0`、`database 0.4.0`)。
|
||||
**阶段一已完成**: T-WEB-001 -> T-WEB-016 全部落地,当前版本 **v0.7.4**(契约 `rest-api 0.5.0`、`websocket-keypoints 0.2.0`、`data-models 0.7.0`、`model-formats 0.5.0`、`skeleton-topology 0.2.0`、`database 0.4.0`)。
|
||||
|
||||
v0.7.4 修订(**场景功能的真正根因:`Scene` 没有注册进 `ENTITIES`**):
|
||||
|
||||
1. **根因(生产实测)**:`/health` 的 `scenes.error` 返回
|
||||
`No metadata for "Scene" was found.` —— `src/entities/index.ts` 的
|
||||
`ENTITIES = [Asset, Song, Motion, CharacterModel, ReviewRecord]` **漏了 `Scene`**。
|
||||
TypeORM 只按 `ENTITIES` 注册 metadata,于是:
|
||||
* **启动完全正常**(DI 图可解析、`/health` 正常、`migrationsPending 0`),
|
||||
* 但**第一次查 Scene 就抛**`No metadata`,于是 `/api/scenes`、
|
||||
`/api/catalog/export`、`/api/catalog/version`、`/api/reviews?status=pending`
|
||||
全部 500 —— 客户端拉不到任何目录、管理端待审列表打不开;
|
||||
* 我此前"数据库缺 scenes 表"的判断**也是错的**:表其实是由 AddScenes 迁移建好的,
|
||||
缺的是**实体注册**;
|
||||
2. **修复**:`ENTITIES` 加入 `Scene`(并导出)。这也解释了为什么 v0.7.3 的降级修复是必要的
|
||||
—— 即使根因是漏注册,降级也保证了"场景坏了不拖垮整站";
|
||||
3. **新增静态防线**`test/entities-registry.spec.ts`(4 项):扫描
|
||||
`src/entities/*.entity.ts` 的 `@Entity()` 类,**逐一与 `ENTITIES` 对账**
|
||||
(漏一个即失败)、检查无重复/无多余,并核对 `AddScenes` 迁移文件确实存在。
|
||||
已做**反向验证**:把 `Scene` 从 `ENTITIES` 移除,该测试立刻失败。
|
||||
这类"漏注册"既过得了 `tsc`,也过得了启动冒烟(应用能启动),
|
||||
只能靠静态核对兜住;
|
||||
4. `web-server/scripts/diagnose-scenes.mjs` 保持不变(默认只读),部署 v0.7.4 后运行它
|
||||
可确认 `scenes` 表与列的实际情况。
|
||||
|
||||
v0.7.3 修订(**场景表不可用不再拖垮整站** —— 生产事故修复):
|
||||
**另有一个更直接的缺陷同时修掉**:`ScenesService.create()` 当初按**内存存储**写,
|
||||
@@ -171,15 +194,15 @@ v0.2.0 主要变更:
|
||||
3. 取得发布包并校验(**本仓库的真实发布地址**, 域名 `gitea.kasugano.cn`、属主 `zijunchiang` 属部署必需信息, 不是隐私项)
|
||||
|
||||
```bash
|
||||
curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.3/opendance-web-v0.7.3.tar.gz
|
||||
curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.3/SHA256SUMS
|
||||
curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/opendance-web-v0.7.4.tar.gz
|
||||
curl -LO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/SHA256SUMS
|
||||
sha256sum -c SHA256SUMS # 期望输出 "OK"
|
||||
```
|
||||
|
||||
4. 解压并生成配置(交互式引导,逐项问答,口令不回显)
|
||||
|
||||
```bash
|
||||
tar -xzf opendance-web-v0.7.3.tar.gz && cd opendance-web-v0.7.3
|
||||
tar -xzf opendance-web-v0.7.4.tar.gz && cd opendance-web-v0.7.4
|
||||
bash deploy/init-env.sh
|
||||
```
|
||||
|
||||
@@ -250,8 +273,8 @@ FLUSH PRIVILEGES;
|
||||
### 5. 部署步骤
|
||||
|
||||
```bash
|
||||
tar -xzf opendance-web-v0.7.3.tar.gz
|
||||
cd opendance-web-v0.7.3
|
||||
tar -xzf opendance-web-v0.7.4.tar.gz
|
||||
cd opendance-web-v0.7.4
|
||||
bash deploy/init-env.sh # 首次启动引导: 逐项问答生成 deploy/.env(见下)
|
||||
bash deploy/install.sh # 已以 root 登录, 不需要 sudo
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user