From a3569a52e7f9153a536670370deb14c00401fe2f Mon Sep 17 00:00:00 2001 From: admin <572701190@qq.com> Date: Tue, 19 May 2026 23:28:17 +0800 Subject: [PATCH] =?UTF-8?q?2026-05-19-23-23-50=20=E5=9B=9E=E6=BB=9A?= =?UTF-8?q?=E7=AE=80=E5=8E=86PDF=E4=B8=8B=E8=BD=BD=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/patch-reactive-resume-filename.sh | 8 ++-- 工程分析/实现方案-2026-05-19-23-23-50.md | 44 +++++++++++++++++++++ 工程分析/测试方案-2026-05-19-23-23-50.md | 48 +++++++++++++++++++++++ 工程分析/经验记录.md | 18 +++++++++ 工程分析/需求分析-2026-05-19-23-23-50.md | 41 +++++++++++++++++++ 5 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 工程分析/实现方案-2026-05-19-23-23-50.md create mode 100644 工程分析/测试方案-2026-05-19-23-23-50.md create mode 100644 工程分析/需求分析-2026-05-19-23-23-50.md diff --git a/scripts/patch-reactive-resume-filename.sh b/scripts/patch-reactive-resume-filename.sh index 8a4a073..2db633e 100755 --- a/scripts/patch-reactive-resume-filename.sh +++ b/scripts/patch-reactive-resume-filename.sh @@ -9,8 +9,8 @@ set -eu PUBLIC_FILE="/app/apps/web/.output/public/assets/file-D5WsIgJH.js" SSR_FILE="/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs" SERVER_INDEX_FILE="/app/apps/web/.output/server/index.mjs" -PDF_FILENAME="王志博-医工智能外科简历.pdf" -CACHE_BUST="rr-filename-20260519-cn" +PDF_FILENAME="ZhiboWang-Resume.pdf" +CACHE_BUST="rr-filename-20260519" cp "$PUBLIC_FILE" "$PUBLIC_FILE.bak-filename" 2>/dev/null || true cp "$SSR_FILE" "$SSR_FILE.bak-filename" 2>/dev/null || true @@ -23,8 +23,8 @@ const crypto = require('crypto'); const publicFile = '/app/apps/web/.output/public/assets/file-D5WsIgJH.js'; const ssrFile = '/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs'; const serverIndexFile = '/app/apps/web/.output/server/index.mjs'; -const pdfFilename = '王志博-医工智能外科简历.pdf'; -const cacheBust = 'rr-filename-20260519-cn'; +const pdfFilename = 'ZhiboWang-Resume.pdf'; +const cacheBust = 'rr-filename-20260519'; function makeEtag(buffer) { const digest = crypto.createHash('sha1').update(buffer).digest('base64').replace(/=+$/g, ''); diff --git a/工程分析/实现方案-2026-05-19-23-23-50.md b/工程分析/实现方案-2026-05-19-23-23-50.md new file mode 100644 index 0000000..6b67193 --- /dev/null +++ b/工程分析/实现方案-2026-05-19-23-23-50.md @@ -0,0 +1,44 @@ +# 实现方案-2026-05-19-23-23-50 + +## 实现方案文档路径 + +`工程分析/实现方案-2026-05-19-23-23-50.md` + +## 修改目标 + +回滚上一条错误指令,将 PDF 下载文件名恢复为 `ZhiboWang-Resume.pdf`。 + +## 涉及路径 + +- `scripts/patch-reactive-resume-filename.sh` +- `工程分析/需求分析-2026-05-19-23-23-50.md` +- `工程分析/实现方案-2026-05-19-23-23-50.md` +- `工程分析/测试方案-2026-05-19-23-23-50.md` +- `工程分析/经验记录.md` + +## 技术路线 + +1. 将脚本中的 `PDF_FILENAME` 恢复为 `ZhiboWang-Resume.pdf`。 +2. 将 Node 补丁逻辑中的 `pdfFilename` 恢复为 `ZhiboWang-Resume.pdf`。 +3. 将 `CACHE_BUST` 与 `cacheBust` 恢复为 `rr-filename-20260519`。 +4. 执行 `sh -n` 做脚本语法检查。 +5. 重新执行补丁脚本,更新运行中容器并等待 healthy。 +6. 验证 HTTP 静态资源中包含旧文件名且不再包含中文文件名。 +7. 创建回滚 commit,并尝试推送 Gitea。 + +## 兼容性与回滚方案 + +- 本次不改数据库、简历 JSON、Compose 或上传文件。 +- 如用户后续给出新的正确文件名,可再次改脚本变量并执行补丁脚本。 +- 当前选择新增回滚提交,保留历史可追溯性。 + +## 预计文件变更 + +- 更新:`scripts/patch-reactive-resume-filename.sh` +- 新增:本次 `需求分析`、`实现方案`、`测试方案` +- 更新:`工程分析/经验记录.md` + +## 提交与部署策略 + +- commit message 使用:`2026-05-19-23-23-50 回滚简历PDF下载文件名` +- 部署通过执行 `scripts/patch-reactive-resume-filename.sh reactive-resume-reactive-resume-1` 完成。 diff --git a/工程分析/测试方案-2026-05-19-23-23-50.md b/工程分析/测试方案-2026-05-19-23-23-50.md new file mode 100644 index 0000000..de6dd27 --- /dev/null +++ b/工程分析/测试方案-2026-05-19-23-23-50.md @@ -0,0 +1,48 @@ +# 测试方案-2026-05-19-23-23-50 + +## 测试方案文档路径 + +`工程分析/测试方案-2026-05-19-23-23-50.md` + +## 静态检查 + +- 执行 `sh -n scripts/patch-reactive-resume-filename.sh`。 +- 搜索脚本确认包含 `ZhiboWang-Resume.pdf`。 + +## 部署验证 + +- 执行 `./scripts/patch-reactive-resume-filename.sh reactive-resume-reactive-resume-1`。 +- 确认容器 `reactive-resume-reactive-resume-1` 为 `healthy`。 + +## 业务验证 + +- 验证容器内 public JS 与 SSR 文件包含 `ZhiboWang-Resume.pdf`。 +- 验证 HTTP 静态资源 `/assets/file-D5WsIgJH.js` 包含 `ZhiboWang-Resume.pdf`。 +- 验证 HTTP 静态资源不再包含 `王志博-医工智能外科简历.pdf` 或 `王志博-医工智能外科-简历.pdf`。 +- 验证 `http://127.0.0.1:3003/api/health` 返回 healthy。 +- 验证 `http://127.0.0.1:3003/audience/resume` 返回 200。 + +## Git/Gitea 备份验证 + +- 创建本地回滚 commit。 +- 尝试 `git push origin main`。 +- 若 HTTP 凭据不可用,记录失败原因。 + +## 风险与回归关注点 + +- 浏览器缓存可能短暂保留旧中文 cache bust;脚本恢复 `rr-filename-20260519` 后应重新更新 importer 与 manifest。 + +## 实际执行结果 + +- `sh -n scripts/patch-reactive-resume-filename.sh`:通过。 +- 脚本搜索:`PDF_FILENAME` 与 `pdfFilename` 均恢复为 `ZhiboWang-Resume.pdf`,`CACHE_BUST` 与 `cacheBust` 均恢复为 `rr-filename-20260519`。 +- `./scripts/patch-reactive-resume-filename.sh reactive-resume-reactive-resume-1`:通过。 +- 容器状态:`reactive-resume-reactive-resume-1` 为 `healthy`。 +- 容器内验证:public JS 与 SSR 文件均包含 `ZhiboWang-Resume.pdf`。 +- 容器内中文残留验证:public JS 与 SSR 文件未检出 `王志博-医工智能外科`。 +- HTTP 静态资源验证:`/assets/file-D5WsIgJH.js` 返回内容包含 `ZhiboWang-Resume.pdf`。 +- Cache bust 验证:业务页面 import 已恢复为 `file-D5WsIgJH.js?v=rr-filename-20260519`。 +- 服务健康验证:`curl http://127.0.0.1:3003/api/health` 返回 `status: healthy`。 +- 公开简历页验证:`curl -I http://127.0.0.1:3003/audience/resume` 返回 `HTTP/1.1 200 OK`。 +- Git 本地备份 commit:已创建,提交信息为 `2026-05-19-23-23-50 回滚简历PDF下载文件名`。 +- Gitea 远端推送:执行 `git push origin main` 时失败,原因是 HTTP 远端 `http://192.168.31.5:5002` 无法读取用户名;未在命令行写入账号密码。 diff --git a/工程分析/经验记录.md b/工程分析/经验记录.md index 46e0e18..2fb6ba7 100644 --- a/工程分析/经验记录.md +++ b/工程分析/经验记录.md @@ -37,3 +37,21 @@ C. 解决问题方案 D. 后续如何避免问题 Gitea 推送前先检查认证方式。优先使用 SSH 或安全凭据助手;如果 HTTP remote 需要 token,应通过安全环境变量或凭据管理器提供,不要直接拼进 URL。 + +## 2026-05-19-23-23-50 回滚错误的 PDF 下载文件名指令 + +A. 具体问题 + +用户说明上一条修改 PDF 下载文件名的指令写错了,需要撤销中文文件名变更。 + +B. 产生问题原因 + +上一条需求将 Reactive Resume 的 PDF 下载文件名从 `ZhiboWang-Resume.pdf` 改为中文文件名;之后最新提交又把中文文件名调整为不带短横线版本。只回滚最新提交会仍然保留中文文件名,不能真正回到原始状态。 + +C. 解决问题方案 + +以原始文件名 `ZhiboWang-Resume.pdf` 为目标,直接恢复 `scripts/patch-reactive-resume-filename.sh` 中 shell 与 Node 两处文件名常量,并恢复 cache bust 为 `rr-filename-20260519`。随后重新执行补丁脚本,让运行中容器 public JS 与 SSR 文件同步恢复。 + +D. 后续如何避免问题 + +用户要求回滚时,先确认要回到哪一个历史状态,而不是只撤销最近一个 commit。涉及线上容器补丁时,Git 文件回滚后必须重新执行补丁脚本并验证 HTTP 静态资源。 diff --git a/工程分析/需求分析-2026-05-19-23-23-50.md b/工程分析/需求分析-2026-05-19-23-23-50.md new file mode 100644 index 0000000..0da1857 --- /dev/null +++ b/工程分析/需求分析-2026-05-19-23-23-50.md @@ -0,0 +1,41 @@ +# 需求分析-2026-05-19-23-23-50 + +## 开始时间 + +2026-05-19-23-23-50 + +## 原始需求摘要 + +用户说明上一条“修改 PDF 下载文件名”的指令写错了,要求回滚。 + +## 业务目标 + +- 将 Reactive Resume PDF 下载文件名恢复到改名前的 `ZhiboWang-Resume.pdf`。 +- 同步恢复运行中容器的 public JS 与 SSR 下载文件名逻辑。 +- 保留本次回滚记录,避免后续误以为中文文件名仍是目标状态。 + +## 输入与输出 + +- 输入:当前最新脚本、当前 Docker 容器、相关 commit `d2edebe` 与 `d77954b`。 +- 输出:脚本恢复旧文件名、运行中服务恢复旧下载名、回滚分析与经验记录。 + +## 影响范围 + +- `scripts/patch-reactive-resume-filename.sh` +- 运行中容器 `reactive-resume-reactive-resume-1` +- `工程分析/` 本次回滚文档与经验记录 + +## 关键约束 + +- 使用非破坏性新增提交完成回滚,不使用 `git reset --hard`。 +- 不删除历史审计文档,新增回滚文档说明原因。 +- Gitea HTTP 远端可能仍缺少凭据,推送失败需要记录。 + +## 风险点 + +- 如果只改 Git 脚本,不重新执行脚本,线上容器仍会保持中文文件名。 +- 如果只回滚最新 `d77954b`,文件名会退到 `王志博-医工智能外科-简历.pdf`,仍然不是原始文件名。 + +## 默认假设 + +- “回滚一下”指回到用户提出中文文件名前的状态,即 `ZhiboWang-Resume.pdf`。