forked from wangziqi/gongxue-base
test: harden pocketbase dry run readiness
This commit is contained in:
@@ -84,7 +84,7 @@ npm run pb:import:dry-run
|
||||
|
||||
## 阶段 1:静态 Dry-Run
|
||||
|
||||
先运行不写数据库的静态报告:
|
||||
先运行不写数据库的静态报告。默认是 `development` profile,适合开发环境快速发现 JSON 形态、关系和敏感字段问题:
|
||||
|
||||
```bash
|
||||
npm run pb:import:dry-run
|
||||
@@ -96,12 +96,22 @@ npm run pb:import:dry-run
|
||||
npm run pb:import:dry-run -- --json > migration-dry-run-report.json
|
||||
```
|
||||
|
||||
严格模式会把 warning 也作为阻断条件,建议预生产验收和 CI 使用:
|
||||
预生产验收、最终切换和 CI 必须使用 `production` profile,并建议同时打开 warning 阻断:
|
||||
|
||||
```bash
|
||||
npm run pb:import:dry-run -- --json --fail-on-warnings
|
||||
npm run pb:import:dry-run -- --profile=production --json --fail-on-warnings
|
||||
```
|
||||
|
||||
也可以用环境变量指定 profile:
|
||||
|
||||
```powershell
|
||||
$env:PB_DRY_RUN_PROFILE="production"
|
||||
npm run pb:import:dry-run -- --json --fail-on-warnings
|
||||
Remove-Item Env:\PB_DRY_RUN_PROFILE
|
||||
```
|
||||
|
||||
`--profile` 只接受 `development` 或 `production`,拼写错误会 fail closed 并返回 blocker,避免正式迁移时误用开发模式。
|
||||
|
||||
dry-run 会检查:
|
||||
|
||||
- 导出目录是否存在。
|
||||
@@ -112,12 +122,15 @@ dry-run 会检查:
|
||||
- 敏感字段是否出现在旧导出中。
|
||||
- 未映射集合是否需要补 mapper。
|
||||
- 用户、题目、订单、SVIP、激活码、单词、手册、分数线、视频等业务数量。
|
||||
- `production` profile 会额外检查生产迁移必需集合:`users`、`questions`、`subjects`、`categories`、`orders`、`svip_plans`、`codes`、`vocabulary_units`、`vocabulary`、`handbook_subjects`、`handbook_chapters`、`handbook_entries`。
|
||||
- `migrationReadiness.criticalFieldCoverage` 会统计关键字段覆盖率,例如 `users.phone`、`questions.subjectId/categoryId/content`、`orders.userId/planId/status`、`codes.code`、单词和手册的归属字段;生产模式下低于阈值会变成 blocker。
|
||||
|
||||
准入标准:
|
||||
|
||||
- `blockers = 0`。
|
||||
- 正式切换前建议 `warnings = 0`;如确有历史脏数据,需要记录处理结论、影响范围和接受人。
|
||||
- `businessCounts` 与旧后台统计口径差异必须能解释。
|
||||
- 生产切换前 `migrationProfile` 必须是 `production`,且 `migrationReadiness.requiredCollections` 不能有缺失或记录数不足。
|
||||
|
||||
## 阶段 2:正式导入演练
|
||||
|
||||
@@ -217,7 +230,7 @@ npm run dev:api
|
||||
1. 公告维护窗口。
|
||||
2. 旧 PocketBase 进入只读或暂停写入。
|
||||
3. 导出最终 JSON。
|
||||
4. 执行 strict dry-run。
|
||||
4. 执行 production strict dry-run。
|
||||
5. 重置目标生产库或清理目标租户迁移数据。
|
||||
6. 执行正式导入。
|
||||
7. 执行 `pb:import:validate` strict 模式。
|
||||
@@ -240,11 +253,10 @@ npm run dev:api
|
||||
|
||||
满足以下条件后,才建议进入生产切换:
|
||||
|
||||
- `npm run pb:import:dry-run -- --json --fail-on-warnings` 通过,或全部 warning 有签字确认的处理结论。
|
||||
- `npm run pb:import:dry-run -- --profile=production --json --fail-on-warnings` 通过,或全部 warning 有签字确认的处理结论。
|
||||
- `npm run pb:import:validate` 无 FAIL;生产切换前 strict 模式无 WARN,或 WARN 已确认。
|
||||
- 核心业务抽样通过,尤其是题目答案解析、会员权益、订单支付、错题收藏、资料视频权限。
|
||||
- `npm run readiness:production` 和 `npm run readiness:production:db` 通过。
|
||||
- API/Taro 三端核心链路在迁移数据上跑通。
|
||||
- 对象存储、短信、OAuth、支付、CRM webhook 使用生产 provider 或明确标记为暂不开启。
|
||||
- 已准备数据库备份、旧系统快照、回滚步骤和负责人。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user