Repository navigation
v0.15.0 — 应用内更新修好了,再次启动不再像卡住
这一版修了什么
一、更新这件事,从"看着像能用"修成"真的能用"
四个缺陷都不是理论风险——是线上就是坏的,逐条读过代码并实测确认:
- 应用内更新在 Windows 上必然失败。 发行版同时挂 Windows 与 macOS 两个包,而挑包的
逻辑是"按文件名排序取第一个.zip":macos排在windows前面,于是 Windows 用户
永远下到 macOS 包,而那个包里没有start.cmd,校验直接报「更新包缺少 start.cmd」——
按钮摆在那里,一点就错。 backend/app/data/永远不会被更新。 排除规则是"任意层级下名为data的目录",
把受跟踪的程序资源(技能词典、ATS 关键词)一起跳过了:新版本往那里加的文件到不了老
用户机器上,随后启动自检会以"缺少文件"拒绝启动。- 先覆盖再停进程。 手动那条路径在应用还开着时就开始复制,文件锁会让它中途失败,
留下一棵"一半新一半旧"的树。 - 失败静默、而且谎报成功。 更新器的输出被丢进黑洞,后端 1 秒后无条件退出;界面更是
在点击安装时就写下"已完成"的标记——安装崩了,下次打开照样显示「已更新」。
现在:按当前平台挑包并核对发布方的 .sha256;排除规则按路径判断(用户数据绝不动、
程序资源跟着更新);复制之前先停应用;更新器的输出与状态写进 runtime/update.log 与
runtime/update-status.json,只有实际跑起来的版本等于目标版本才算成功,没起来会说清
原因和日志位置。
二、已经装在旧版本上的用户,也能从应用内更新
上面第一条最后那句"这段代码在旧版本上修不了"是真的:应用内更新跑的挑包逻辑,是用户
机器上那份旧代码。所以他手上那个按钮,光靠改新版本救不回来。
救它的是发行版的资产名:这一版多挂一个 ResumeForge-0.15.0-all.zip,它按文件名排序
排在最前面,旧代码会选中它——而它确实装得上。从 0.15.0 起,应用内更新自己会优先选带
平台词的包,全平台包只作为兜底,不受影响。
如果你现在跑的是 0.14.2 或更早、并且点「重启并安装」报过「更新包缺少 start.cmd」:
这一版可以再试一次,或者照旧双击 update.cmd / update.command——两条路都不会动
你的 data/。
三、再次启动时,终端会说明"正在载入"
依赖装好之后再次双击 start.cmd,终端原本在「探测依赖 → 等后端就绪(最长 90 秒)→ 等
前端就绪(最长 120 秒)→ 预热前端页面」这几段里一行字都没有——最容易被当成卡死。
现在会先说一句"依赖已经装好、这次不用重新装",再在每段等待前报一句"正在等待后端/前端
就绪(最多 N 秒)"。macOS 补上同样的等待提示。
怎么更新到这一版
- 已经在用(0.14.2 及更早):设置 → 应用 → 软件更新 → 检查更新 → 下载 → 重启并安装;
或者双击项目目录里的update.cmd(macOS 是update.command)。两条路都只替换程序文件。 - 第一次安装:到下面「Assets」里按系统下载——
- Windows:
ResumeForge-0.15.0-windows.zip - macOS:
ResumeForge-0.15.0-macos.zip ResumeForge-0.15.0-all.zip是给"手动下载但不确定系统"和旧版本应用内更新用的,
它同时含两个平台的启动脚本,解压双击即可。
解压后双击start.cmd(Windows)或start.command(macOS),其余依赖会自动准备。
- Windows:
旧版本的数据怎么带过来
不用做任何事。 data/(岗位、简历、资料、助手对话、照片)与 .env 都在更新范围之外,
更新只覆盖程序文件。数据库结构在下次启动时自动升级,升级前会在
backend/data/backups/ 留一份快照。
换电脑或想留底:设置 → 数据 → 导出当前数据集,在新机器上「导入备份为新数据集」还原即可
(备份不含 API Key,需要重新填写)。
校验下载
每个压缩包旁边都有一份 .sha256。Windows 上:
Get-FileHash .\ResumeForge-0.15.0-windows.zip -Algorithm SHA256macOS 上:
shasum -a 256 ResumeForge-0.15.0-macos.zip把结果与 .sha256 文件里的值对照即可。应用内更新会自动做这一步。
完整改动
见仓库里的 CHANGELOG.md。