Files
cmautobuy/docs/task/269-admin部署档口逐件回写与原始SKU匹配版本.md
T
2026-08-18 15:41:31 +08:00

4.4 KiB
Raw Blame History

269 Admin:部署档口逐件回写与原始 SKU 匹配版本

  • 类型:部署
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / Admin 生产部署
  • 状态:已完成,待用户验收
  • 日期:2026-08-18
  • Gitea 工单:#269

背景与目标

把 #250 多件档口入库码逐件回写和 #259 原始 SKU 确定性匹配发布到生产 Admin,继续通过 https://buy.833729.com 提供服务,并安全处理相应 MySQL 追加迁移。

最终方案

  • 最初固定提交 a989e0d 隔离构建并上传。生产预检发现数据库已被此前运行中的本地 Admin 记录为 v28,但 source_sku_raw 使用中间版本的默认排序规则,最终结构自检拒绝启动;稳定链接此时没有切换,旧服务继续运行。
  • 按追加迁移原则在 #259 增加 v29,不改写 v28:把既有字段统一为 VARCHAR(500) COLLATE utf8mb4_bin NULL,字段已正确时不改数据。最终固定提交改为 7175af5 并重新隔离验证、构建、上传和校验。
  • 切换前确认 SYB 同步、AI 匹配及档口入库码排队/回写均为 0。两条 assigned/claimed 采购任务是 8 月 12–13 日遗留状态,对应 Client 已长期未上线,不属于正在执行的任务。
  • 创建生产数据库单事务逻辑备份,验证权限、压缩包和建表段。目标二进制在 127.0.0.1:18081 预检成功并执行 v29,登录页返回 200。
  • 再次确认后台空闲后停止 systemd,原子切换稳定链接并启动。发布后验证 release 哈希、systemd、监听、schema v29、后台状态、Nginx、本机及公网 HTTP。
  • 配置、数据和 AI 密钥继续放在 release 外并由现有链接/环境文件复用;没有读取或输出凭据,也没有触发真实业务动作。

改了哪些

  • /opt/cmautobuy/releases/7175af5/cmautobuy-admin:新增并启用最终生产 release。
  • /opt/cmautobuy/cmautobuy-admin:从 d79e5c4 原子切换到 7175af5。
  • /opt/cmautobuy/backups/autobuy-before-269-20260818T073254Z.sql.gz:新增部署前生产备份。
  • MySQL schema:从已存在的 v28 升级至 v29,source_sku_raw 统一为 utf8mb4_bin。
  • 未启用的候选 release a989e0d 和上传暂存文件已删除;前一生产 release d79e5c4 保留,但不兼容 schema v29,不能单独回切。

验收结果

验收标准 结果
发布物来自固定提交 7175af5,Go 1.23.0 测试、build、vet 通过 通过
部署前后台任务空闲,数据库备份完整 通过
本地、上传及最终 release 哈希一致 通过
v29 迁移成功且原始 SKU 字段为二进制排序规则 通过
systemd active/enabled,仅监听 127.0.0.1:18080 通过
Nginx、本机和公网登录页、静态资源正常 通过
新二进制包含 #250、#259 页面/错误标识 通过
未修改配置或触发真实业务动作 通过

发布结果:

  • 二进制:28,131,480 字节,SHA-256 c14b1a92736d7e83459038b1957b835bd8d12a1108289e5788ca3f66c6468ac6。
  • 数据库备份:5,101,261 字节、权限 0600,SHA-256 7d36990b8db734cde9890f4d7ad4a648080b0fd5f3cd84bb498c978bf82fd832,包含 32 个建表段。
  • 新进程 PID 为 21314,启动时间 2026-08-18 15:39:51 CST。
  • 本机根路径 303、登录页 200;公网根路径 303、登录页 200、app.js 200。
  • 发布后 SYB、AI、档口入库码活动任务均为 0,启动日志中的 fatal、panic 和迁移错误均为 0。

测试

  • 执行的命令:隔离 worktree 中使用 Go 1.23.0 执行 go test ./... -count=1、go build ./...、go vet ./...;Linux amd64 静态构建;服务器执行 mysqldump、gzip -t、sha256sum、独立端口预检、schema/字段查询、systemctl、ss、nginx -t、journalctl、本机与公网 curl。
  • 结果:最终构建、备份、v29 迁移、切换和发布后检查全部通过。
  • 没验证到的部分:未使用生产账号登录后执行 Excel 重新导入、顺运宝匹配或真实多件回写;未触发同步、AI 匹配、采集、采购、下单或付款;未实际恢复数据库备份。

遗留问题

前一 release d79e5c4 最高只支持旧 schema,不能在 v29 数据库上单独启动。若必须回到该版本,需要同时恢复本次备份,这会覆盖备份时间之后产生的数据。

相关提交

  • b685d2c fix: 追加原始SKU字段兼容迁移 (#259)
  • 7175af5 本次生产目标代码基线