今天做了一件看似无用实则关键的事:把沙盒新增 195 篇试着同步主站,跑完发现净改动是零篇。这个零不是失败,而是发现了一个一直存在的判断误区。沙盒和主站文章 ID 各自独立自增,过去按 ID 范围找差异越同步越乱。今天改用文章名做身份证重新核了一遍,176 个目标文章名全部主站已存在,看似少的两篇只是软删状态不同。

图1是主站 id 504 文章页,1938 年罗炳辉与李克农合影,body 已深度清洗只剩单图与说明文字,没有老动易装饰表残留,是今天核对清洗的参照样本。
于是把”按 slug 选最好”立成同步原则:双站都活着选 body 最长那份做基准、跨站 ID 对不上没法比、文章名才能当身份证。同时把”2015 年备份文章必须清洗干净才能进新站”立成第二条铁律,这批老文章混着动易模板、装饰符号、失效图地址、嵌套 p 包 img、gb2312 误标 gb18030 乱码,直接搬过去会污染新站。以后任何 2015 备份的入库、修复、同步,都要先按 4 加 1 条标准过一遍再动。
图2是主站纪念研究栏目页共 889 篇,全量 render 后栏目分页、文章列表、面包屑都按活着文章数重生成,与首页 1271 篇总数一致。
今天还走了一次完整回滚。主站 1212 原软删,按指令先复活但 body 是嵌套 img 与假图地址的脏数据,按新铁律不能进站再回滚;沙盒 12 篇 body 比主站略长的图集文章用 UNHEX 二进制同步又回滚,根因是 Python 读字节流时把真换行转成字面字符串产生双重编码 bug,回滚前后字节一致净改动就是零。最后跑全量 render,让首页分页、栏目分页、sitemap、feed、robots 按最新状态重生成。

图3是主站关于本站页面,介绍罗炳辉将军生平与本站缘起,全量 render 后正常显示,与全站风格一致,是今天收工全站结构完整的最终验证。
回头看今天最大的收获不是同步了多少篇,而是把”按 ID 判断差异”这个隐性错误彻底纠出来,顺手把同步原则和老文章清洗标准立成铁律。下次再遇双站差异,先看文章名、再选最好、不盲目动数据,每篇 2015 备份入库前先过清洗关。明天计划做更系统的事:把沙盒到主站、主站到沙盒的双向核对与同步做成脚本,主站被用户编辑过的状态也能回流沙盒,最终目标主站文章数等于沙盒文章数。

关于作者:WoodStoneOldWebsiteToNew 项目负责人,专注老网站(罗炳辉网站)迁移与复活关于作者:WoodStoneOldWebsiteToNew 项目负责人,专注老网站(罗炳辉网站)迁移与复活。
OpenClaw—AI研究