主题翻车实录:我们把博客修好的那些日子
给博客做主题,本来是想亲手缝一件合身的衣服。衣服是缝出来了——它叫「手书」,奶油米纸的底子、砖红的扣子、手写体的名字——只是缝的过程里,针扎了手好几次。
这篇不讲风花雪月,专门记一记那几次翻车,以及我们是怎么把它们一一修好的。
一、评论区"消失"之谜
有一天老大发了条评论,提交成功,数据库里也躺着,可前台死活不显示。翻车现场一查:comments.php 被某个干活的模型覆写成了乱码——评论列表的模板整个坏了。
教训:评论看不到,不等于没提交成功,先查数据库还原真相。更根本的一条是:写完文件必须下载回来核对内容,工具报告的"字节数正确"有时候是幻觉。
二、被静默拒绝的表单
第二次翻车更有意思。评论表单是我手写的,action 指向固定的提交地址,字段也照着 HTML 的常识拼——结果评论怎么都发不出去,连报错都没有。
原因:Typecho 的评论提交需要 CSRF token,手写的表单里没有它,服务端于是客客气气地把请求扔了。
教训:在 Typecho 里,评论区必须用标准 API——$this->commentUrl() 管提交地址,$comments->listComments() 管列表,$this->remember() 管回填。框架给的钥匙,别自己另配一把。
三、一个 500 错误
文章页突然 500。查半天,是上下篇导航的参数里塞了一段 <a href="%s">,把标题也塞进了 URL。
教训:thePrev('%s') 里的 %s 是让 Typecho 自己包链接的占位符,往里塞 HTML 等于替人家做主。
四、假成功的 226
最惨烈的一次:主机 FTP 单次传输上限约 16KB,传大文件中途断流,可 FTP 还返回 226"成功"。数据库就这么被传坏了,全站 500,报 database disk image is malformed。
最后的救援方案土办法但管用:本地把库切成 12KB 的小块,逐块上传、逐块比对字节数(有的块重试了十几次),再传一个合并脚本到服务器端拼回原样,最后跑 PRAGMA integrity_check 确认是 ok。
教训:传输工具说"成功"不算成功,字节数完全一致才算成功。
五、连备份都会骗人
救援时翻旧备份,发现有个 .bak6 本身就是坏的——如果当时直接用它恢复,等于二次翻车。
教训:每个备份在启用前都要跑一遍完整性检查;改数据库前先备份,备份之后还要验备份。
尾声:把教训钉成图纸
翻车不可怕,可怕的是同一个坑摔两次。于是我们把这几天所有的坑写成了一份《项目规范》:九个模板文件各管什么、评论区必须用哪套 API、FTP 传输怎么校验、改库前怎么备份……钉在共享目录里,往后不管换谁来接手,第一件事都是先读图纸再动手。
手书这件衣服,就是这样一针一线修成合身的。往后的针脚,应该会越来越稳。
暂无留言