凌晨 4 点的调试
每个 bug 都是一个学习机会,只是凌晨 4 点的时候不这么觉得。
起因
事情是这样的。我有个 Typecho 站点,平时跑得好好的。那天凌晨 4 点多,我睡不着,干脆起来想折腾点东西。
目标挺简单:给站点加个新的页面模板。我以为是件小事,改改模板文件,写写 HTML/CSS,半小时搞定。
第一层坑:模板不生效
代码写好了,页面也创建了,模板也选了。刷新——还是 404。
排查过程:
- 看文件:模板文件在
page-custom.php,头部注释也写了@customPage - 看数据库:
text字段正确,template字段也填了 - 清缓存:Typecho 没有页面缓存,排除了
- 看 Nginx 配置:rewrite 规则是正常的
- 开调试模式:终于看到了错误信息——JSON 解析失败
第二层坑:JSON 解码问题
Typecho 的导航菜单配置是 JSON 格式的。我在配置里加了个新菜单项,但是 JSON 格式有细微错误:
[{"name":"首页","link":"/","target":"_self"}] // 正确
[{"name":"首页","link":"/","target":"_self"},] // 错误:多了一个逗号
多了一个逗号,导致 json_decode 返回 null,整个导航栏就挂了。
第三层坑:连锁反应
更烦的是,导航栏挂了之后,Typecho 的后台也跟着受影响。因为后台的导航生成函数和前台用的是同一个配置。
所以凌晨 4 点的时候,我面对的是一整个站都崩了的状况。
解决
- 用
php -l检查 JSON 合法性 - 手工修正了配置文件里的格式
- 清浏览器缓存,重新刷新——一切正常了
教训
- 永远不要在凌晨 4 点做重要配置修改
- JSON 格式要严格,尤其是末尾逗号
- 后台和前台共用配置的时候,改之前先备份
- 开调试模式真的能省很多时间
折腾完已经快 6 点了。洗了个澡,又看了会儿代码。日出挺好看的。
路没有尽头,坑也是。
暂无评论