v1.2.4 正式版 · 修复拖拽排序保存时的 503
测试与升级说明
本版已在全新 Halo 2.26 实例完成:自动化回归 50/50 PASS、浏览器端到端 13/13 PASS、附件库来源范围专项 5/5 PASS、拖拽排序专项 6/6 PASS(写入最大并发 = 1、全部 JSON Patch、无逐条 GET、无 5xx、顺序落库正确)。长期运行、多主题兼容、极端数据量等场景未覆盖。
升级后请强刷一次浏览器(Ctrl+Shift+R / Cmd+Shift+R):Halo 控制台会缓存插件的控制台包,不强刷时看不到新界面(如侧边栏没有「记得」、仪表盘小组件消失)。
修复:拖拽排序时的 503(反向代理把请求突发挡在了 Halo 之外)
-
现象:拖拽人员 / 日期 / 座驾卡片调序时提示「保存排序失败:Request failed with status code 503」,弹窗里是反向代理返回的
503 Service Temporarily Unavailable,而 Halo 日志里没有任何记录。 -
根因:
- 旧实现把整张表重新编号,并用
Promise.all并发提交;每次提交还要「先 GET 最新版本 → 再 PUT」两步; - 实测(4~6 个对象的列表拖一次):6 个 GET + 6 个 PUT,最大并发 6,全部集中在 45 毫秒内;
- 站点前有反向代理(nginx / CDN)。nginx 的
limit_req(请求速率)与limit_conn(并发连接数)默认以 503 自行拒绝,请求到不了 Halo——这正是"服务端查不到报错"的原因。
- 旧实现把整张表重新编号,并用
-
修复:① 只写真正发生位移的连续区间(非 1…n 稠密数据回退整表重排,保证正确);② 改用 JSON Patch 只改
spec.sortOrder一个字段,去掉 GET,请求数减半;③ 串行提交(间隔 40ms),最大并发降到 1;④ 对 429/5xx 退避重试 3 次;⑤ 报错文案点明「站点反向代理暂时不可用」而不是只抛状态码。 -
实测对比:
修复前 修复后 写请求 6 个 PUT(+6 个 GET) 5 个 PATCH(0 个 GET) 最大并发 6 1 结果 突发、易被代理 503 全部 2xx,顺序正确落库
提示:若站点反向代理限流设置非常严格(例如
limit_conn只允许极少并发),仍建议检查一次limit_req/limit_conn;本插件已不再产生突发请求。
验证(全新 Halo 2.26 实例)
- 冒烟回归
halo-smoke.mjs50/50 PASS;浏览器端到端browser-121-e2e.mjs13/13 PASS;附件库来源范围verify-album-scope.mjs5/5 PASS; - 拖拽排序专项
verify-sort-save.mjs6/6 PASS:断言写入最大并发 = 1、无逐条 GET、全部 PATCH、无 5xx、排序结果正确落库; - 顺带加固:冒烟脚本的就绪检测现在同时确认「插件接口 + 前台页面」连续两次正常,避免安装后 Halo 重启插件的窗口期(前台瞬时 500
Scheme not found,属 Halo 插件生命周期)被误判为失败。
兼容与升级
- Halo 2.26 及以上;由 1.2.0 / 1.2.1 / 1.2.2 / 1.2.3 / 1.1.x 升级:停用 → 卸载 → 安装本版 → 启用,数据不会丢失;
- 若主题目录存在自定义覆盖文件
templates/important-dates.html,请用仓库docs/theme-override/下最新版替换(或删除该文件使用插件默认模板); - 使用页面缓存 / 静态化插件时,升级后清理一次页面缓存。
资源下载
- plugin-important-dates-1.2.4.jar
