2026-08-15 立。test 验过 ≠ 能上生产——批 B 有几件事只在生产侧存在,漏一件就是资金事故。
本清单所有状态均实查得出,不是照抄文档。发版前逐条过,过一条打一个勾。
实查(2026-08-15):
settle-prod 最新 run#7 · 分支 main · 仓库 a7b6e0a0129631e95/tongban-settlement.git ← 旧仓
settle-test 最新 run · 分支 test · 仓库 e93a7b6e0a0129631e95/doctor-ai-brain.git ← 统一仓
⇒ 批 B 代码在统一仓,结算生产流水线根本不会构建到它。
不切源就发版 = 流水线绿了、生产跑的还是旧代码,门店点支付直接 404。
settle-prod 流水线源到 doctor-ai-brain.git(要 root + 长官点头)实查 run#136 日志,不是代码问题:
Image doctor-ai-brain-api:latest Built ✅
Image doctor-ai-brain-web:latest Built ✅
Container doctor-api Recreated ✅
Container doctor-web Error: Conflict. The container name "/8e186246bbb4_doctor-web"
is already in use by container "9abdd0e6f06f41..."
⇒ 有个孤儿容器占着 doctor-web 的名字,导致 web 换不上去。
🔴 更麻烦的是:api 已经换成新的、web 没换 —— 生产当前是新旧混跑状态。
9abdd0e6f06f41...origin/main)实测 origin/main 是 2 个头(phase70_001 / store_poster_demo_flag,均 fork 于 phase63_002)。
- [ ] merge 这两个头(要长官点头才动生产)
/opt/wxpay-secrets/(700)放 apiclient_key.pem + pub_key.pem(600)deploy/ 里 —— 那是 CI 同步区,rsync --delete 每次发版清掉密钥。.env.production 补 8 个 WECHATPAY_* 变量WECHATPAY_APIV3_KEY 缺了回调解不开 = 钱收了入不了账,代码已 fail fast)WECHATPAY_NOTIFY_URL=https://chat.tongban.love/api/wxpay/notify ← 生产域名,别抄 test 的location /api/wxpay → 结算服务(test 已验证,生产要照做)chat.tongban.love(交接件称已配,上线前再核一遍)phase68_000(建表)+ phase68_001(退款冲销约束)在生产按序执行phase68_001 动了资金表约束(放宽负数、唯一约束改部分唯一),downgrade → upgrade,但生产回滚前要先确认没有负数冲销记录,pg_constraint),不看日志看库settlement_rw 对 payment_orders 有权限settlement_rw 跑迁移,建表者=天然属主,正常情况不用额外授权;pg_tables.tableownerapp/api/wx_openid_probe.py + 核心 main.py 两行注册(openid 取号探针页)/api/wxpay/self-check 端点 + 结算 main.py 两行注册grep -rn "wx-probe\|self-check" 确认零残留sudo release-to-prod --mr <已在 test 验收的 MR 编号>release/* 分支,只提取点名的 MRtest → main(共享 test 会把其他会话的提交搭车带进生产)--mr,未列出的物理不会进发布分支commit_ids + changed_files,与预期完全一致才继续curl https://chat.tongban.love/api/wxpay/self-check → 若已删该端点,| 出什么事 | 怎么退 |
|---|---|
| 支付发起不了 | 前端下掉"微信支付"入口,回落线下凭证流程(老链路一行没动,仍可用) |
| 回调入账错 | 停回调(nginx 摘掉 /api/wxpay/notify),微信会持续重推 24h,修好再放回 |
| 冲销约束有问题 | 回滚 phase68_001(先确认库里无负数记录) |
| 整批要退 | release-to-prod 是隔离分支发布,回退对应 MR 即可 |
release-pipeline-status 真跑),非文档转抄。