docs: 记录部署即跑迁移、时区口径与任务列表分页用法

This commit is contained in:
yml2213
2026-10-03 10:44:06 +08:00
parent 7293d758f1
commit 6ce988a3da
2 changed files with 16 additions and 6 deletions
+5
View File
@@ -133,6 +133,11 @@ python3 -c 'import secrets; print(secrets.token_urlsafe(32))'
进程重启会把内存里丢失的 pending/running 任务标成中断,避免前端被假活跃批次锁死。
登录任务列表支持分页(20/50/100/200/500)与状态筛选;表格支持跨页勾选、表头的
「选择全部 N 条(含其他页)」用于按筛选条件批量操作,以及「清空失败」一键清理。
批量删除**会跳过 pending/running**:要停止在跑的批次请用「停止」,不要删除
(删掉会让批次线程找不到记录)。
## 运行测试
```bash
+11 -6
View File
@@ -1105,9 +1105,10 @@ pending_material(待用户补资料) ← 模板有必填字段时的
- **P1a 已上线**(2026-10-02),只做「帮你把失效 CK 找出来」,零风险;
- **P1b 已上线**(2026-10-02):20 个失效账号实测 20/20 重登成功、零极验;当前 30 条/轮、约 97% 成功率,待重登积压约 3.6k 正在消化;
- **P0 已过半**(2026-10-02):适配层 + 迁移 0039 已完成并真机验证(三桶判定全对、3.3ms、540 个重复订单号正确拦下),
**但只有底层适配层:无接口、无页面,且生产开关仍是 `false`、迁移未在生产跑**。
接口与页面按 §6.4 的调用点(用户填订单号时)随 P2 一起上;
- **P0 已过半**(2026-10-02):适配层 + 迁移 0039 已完成并真机验证(三桶判定全对、3.3ms、540 个重复订单号正确拦下)。
`psycopg` 与迁移 0039 已随 2026-10-03 的部署上线(`external_order_cache` 表已在生产建好)。
**仍缺接口与页面**,且 `ORDER_SITE_LOOKUP_ENABLED=false` —— 运营还查不了订单;
接口/页面按 §6.4 的调用点(用户填订单号时)随 P2 一起上;
- **P1b 提到 P1a 之后**:原计划等一到两周观察期,但线上数据已把三个前提验证完了 —— 检测结果与人工/直连逐条一致、误判路径已封(三类判定 + 自动暂停)、失效性质查清(会话过期而非凭证问题)。不联动的话,巡检每天翻出失效清单却没人兑现修复,1,356 个账号只会越积越多;
- **P0 随时可做**:只动本系统,order_site 侧代码改动量为 0;
- **P1b 开关仍默认关闭**,按 §7.4.7 三段上线:小规模实测 → 限量开 → 全量;
@@ -1355,6 +1356,9 @@ OSS_PREFIX=collect
`_as_utc()`(`services/yyb_service.py` 与 `services/automation/scheduler.py` 各有一份)补时区。
SQL 里用绑定参数比较不受影响,只有 Python 侧比较需要注意 —— P0 判缓存过期时会再遇到;
- **每个阶段独立可发布**,新作业/新功能一律**开关默认关闭**;
- **迁移是应用启动时自动跑的**(`database.init_db()` → `run_migrations()` → `alembic upgrade head`)。
所以「部署」就等于「跑迁移」,**不要**再手动执行一遍;同时也意味着**迁移写坏了会挡住整个应用启动**,
必须保持幂等(先 `sa.inspect` 查存在再改)。想先看效果可在本地 dev 库跑;
- **⚠️ 动手前先核实外部库的真实表结构,别信文档和早期分析**(P0 踩过一次,差点白干):
规划 §6.2 写的 `orders.order_no`(PK) 在真实库里**根本不存在**,实际是
`platform_order_id`(且**非唯一**,541 组重复)。同一订单号下还有「发货方内部行 +
@@ -1380,10 +1384,11 @@ OSS_PREFIX=collect
| uvicorn worker 数 | **`--workers 1`**(单容器单进程) | 进程内调度线程安全,**不需要分布式锁**;调度器在 lifespan 里启停 |
| 生产路径 | `/root/live-hub-py`,容器 `live-hub-py-douyu-login-1` | 部署 = `git pull` + `./deploy.sh` |
| 鉴权 | **无全局中间件**,逐路由 `Depends(get_current_user)` | 公开路由只要不挂依赖;新路由要在 `main.py` 注册 |
| PG 驱动 | `psycopg[binary]` 已加入 `pyproject.toml` + `uv.lock`(2026-10-02);**生产镜像尚未重建** | 部署 P0 时会随镜像重建装上;临时验证已在容器里手工装过 |
| PG 驱动 | `psycopg[binary]` 已进 `pyproject.toml` + `uv.lock`,**已随镜像上线**(2026-10-03,容器实测 3.3.6) | 部署时随镜像装上 |
| 只读 PG | `livehub_ro` @ `order_site-postgres-1:5432`,`.env` 已配(容器内 3 个 `ORDER_SITE_*` 均可见) | 适配层直接用 `ORDER_SITE_DATABASE_URL`;**`LOOKUP_ENABLED` 仍是 `false`** |
| OSS | 桶 `live-hub-assets`(私有+版本控制)、RAM `live-hub-oss`、`.env` 已配 | P2 用 `oss2`;**不要用 HeadBucket** |
| 迁移 head / 测试基线 | `20261002_0039` / 328 条(2026-10-02) | 见 C.1;生产库**尚未**跑 0039 |
| 迁移 head / 测试基线 | `20261002_0039` / 338 条(2026-10-03) | 见 C.1;**应用启动会自动跑迁移**,0039 已在生产应用 |
| 时区 | 库/`NOW()` 都是 UTC(`--default-time-zone=+00:00`),接口返回 `+00:00`,前端转北京时间 | **别把 `SELECT NOW()` 当真实时间**,详见 README「时区口径」 |
### C.4 P1a 施工单(✅ 已按此完成,8 步)
@@ -1425,7 +1430,7 @@ OSS_PREFIX=collect
**⚠️ 上线前还需做(P0 未完的部分)**
1. `ORDER_SITE_LOOKUP_ENABLED` 仍为 `false`(默认关闭)—— 要正式启用需改生产 `.env` 并重启;
2. 生产库还没跑迁移 0039,`external_order_cache` 表不存在(缓存写入会 warning 降级,不影响主流程);
2. ~~生产库还没跑迁移 0039~~ ✅ **已于 2026-10-03 部署时自动应用**(`external_order_cache` 表已存在,psycopg 3.3.6 随镜像装上);
3. **P0 目前只有适配层,没有接口和页面** —— 运营还查不了。按 §12 排期,接口/页面可随 P2 收集链接一起上(用户填订单号时调用)。
### C.5 其余阶段的施工顺序(粗粒度)