# 2026-10-09 ## 排查:/admin/settings 报错(旧二进制 + 新模板) **现象**:「统计脚本做成后台开关」那次提交(4015ddf)之后,访问 /admin/settings 报错。 **根因(已实测复现)**:跑的是**旧二进制**(根目录 `rond.exe`,10-08 18:06 编译,早于 18:27 的提交), 磁盘上的模板却是新的。`debug=true` 下 `pageSet()` 每次渲染都从磁盘重解析模板, 于是新 `settings.html:148` 引用了旧 `setting.Settings` 结构体里没有的 `TrackEnabled` → 执行期报错: ``` 渲染 admin/settings 失败: template: settings.html:148:85: executing "content" at <.Settings.TrackEnabled>: can't evaluate field TrackEnabled in type setting.Settings ``` `render` 是流式直写 ⇒ header 已发(HTTP 200)但表单在「统计脚本」卡片处截断, 没保存按钮、没 ``。这就是用户看到的「报错」。 **判据**:`strings <二进制> | grep -c cleanTrackScript` —— 旧根二进制 0,新编译的 2。 (注意别用 `strings | grep TrackScript` 判定,config 里本来就有这个名字,旧二进制也命中。) **修复**:`go build -o rond.exe .`(+ `bin/rond.exe`),重启。旧二进制备份到 `bin/rond.exe.old-20261008-stale`。修后 /admin/settings 完整(19642B,含 ``/保存按钮)。 **教训**:Go 结构与模板字段是成对改的,`debug=true` 的热加载只覆盖模板 —— 改 Go 必须重编译重启, 否则就是「新模板 + 旧结构 = 执行期报错」。想根治可在启动时把所有页面各渲染一遍做冒烟(现在没有)。 ## 其他发现(未改代码) 1. **P1 待确认**:`settings` 行 `pages=null`(写入时间 2026-10-08 18:14:05)⇒ 访客侧 `/map /places /timeline /stats /report` 全部 404、导航只剩 1 个链接。代码语义是 「全不选 = 访客只能看主页」,属合法状态,像是测 404 分档时留下的。**没动数据,等确认**。 2. **P2**:`cleanTrackScript` 的 `src=` 检查是**全文 `strings.Index`**,会误伤脚本体内的 `src=`。实测:`` → 返回 `""`(整段被静默清空), 而页面仍提示「设置已保存」⇒ 静默失效。建议只在标签属性里查 src,或把「被清空」回传前端显式提示。 3. **P2**:开闭标签只拒 `shut > open`;末尾未闭合 `` 会被判为粘贴错误」漏了「少一个也会拒」(判据已改成严格配平); ②「`conf/app.ini` 的 `track_script` 会作为这里的默认值」有歧义:它**不会回填文本框**, 而是「这个框留空时,注入时回落到 ini 的值」。已改成准确说法。 实测热加载生效(debug=true,无需重编),页面 19996B、含 ``,旧文案 0 命中。 - 验收:官方 `./scripts/verify.sh` → **PASS=346 FAIL=0 SKIP=0**(改动前那次全量; 之后只动了这一个模板文案,重跑了全部模板门禁与 `TestSmokeRender*`,全绿)。