# Changelog — test_api 健康检查与生产 Gate 跟进 **日期**: 2026-06-01 **类型**: 修复 / 运维跟进 ## 摘要 - `tests/test_api.py`:`GET /health` 改为断言纯文本 `ok`(与 `server/api/health.py` 的 `PlainTextResponse` 一致),不再 `json.loads`。 - 生产 `.env`:`NEXUS_TEST_ADMIN_PASSWORD` 须与数据库 `admin` 密码一致;原值 `Nexus@2026Test` 导致 Gate 3 登录 401。 ## 动机 部署后 `python3 tests/test_api.py` 18/18 失败:健康检查因期望 JSON 解析失败;其余用例因未拿到 JWT 连锁失败。 ## 涉及文件 - `tests/test_api.py` — 新增 `test_plain_text()`,`/health` 用例改用 - 生产 `/www/wwwroot/api.synaglobal.vip/.env` — `NEXUS_TEST_ADMIN_PASSWORD` 对齐真实管理员密码(运维操作,不入库) ## 前置条件 - `NEXUS_TEST_ADMIN_USER` / `NEXUS_TEST_ADMIN_PASSWORD` 与 MySQL `admins` 表一致 - 后端监听 `NEXUS_TEST_BASE`(默认 `http://127.0.0.1:8600`) ## 迁移 / 重启 - 仅改测试脚本:无需重启;改 `.env` 后无需重启(测试进程读环境变量) - 前端 assets prune:务必先 `python deploy/prune_frontend_assets.py --dry-run`,确认 `would_remove` 合理后再实删 ## 验证 ```bash # 服务器 cd /www/wwwroot/api.synaglobal.vip python3 tests/test_api.py # 预期:Results: N/N passed, 0 failed curl -s http://127.0.0.1:8600/health # ok ``` ## 回滚 - 还原 `tests/test_api.py` 中 health 用例为旧版(不推荐,与 API 契约不符) - `.env` 测试密码改回前值仅当故意使用独立测试账号时 ## 2026-06-01 晚间追加(前端部署) - `vite build` + tar/scp 部署至生产 `web/app/` - **事故**:`prune_frontend_assets.py` 正则首字符不允许 `_`,误删 `_plugin-vue_export-helper-*.js` → 全站白屏;已 scp 恢复并修复正则 `[_A-Za-z0-9]...` - **后端**:`RefreshRequest.refresh_token` 改为 Optional,空 body `{}` 不再 422 - **浏览器验证**:`#/servers` 勾选 2 台后出现「已选择 2 台服务器」及批量按钮(含 `normalizeServerIds` 的 `ServersPage-Vzm34hgn.js`) ## 关联 - `docs/changelog/2026-06-01-bug-remediation.md` - `deploy/prune_frontend_assets.py`(Rolldown 闭包引用扫描;须匹配 `_plugin-vue_export-helper` 等 chunk)