上线前夜,我对着这份清单又核对了三遍,结果还是漏了第7条

站长杂谈 14 浏览 0 回复 返回上级

上周把折腾了两个月的后台系统往生产环境推,白天还自信满满觉得"这次稳了",凌晨两点被监控告警炸醒——新注册的普通用户居然能看到超级管理员的数据看板。排查半小时,发现是菜单权限缓存没清,本地测试时用的管理员账号,根本没触发这条分支。

痛定思痛,我把这次踩的坑和之前几次上线翻车的点揉了揉,整了份自己用的「上线前 Checklist」。不整那些大而全的,只放我实实在在栽过的:

一、权限与角色:别只测管理员账号

我最常犯的错就是本地全程用超管账号点点点,上线后才发现普通角色某个按钮没隐藏、某条路由没拦截。现在我的习惯是:

• 准备三个测试账号:超管、普通运营、仅浏览权限,上线前全部跑一遍核心页面
• 重点检查「禁用」状态的账号——有次逻辑写反了,禁用的反而能登录
• 权限节点如果做了缓存,务必在清单里加一条"清除权限缓存",最好写成强制步骤而不是"记得的话"

ThinkPHP 的 `Auth` 中间件如果用了缓存,本地改完权限规则不刷新可能测不出来,生产环境一上线就暴露。

二、路由:隐藏参数和大小写陷阱

有回我把本地开发好的模块打包到正式站,某个页面404。比对半天,发现是 Linux 生产环境区分大小写,本地 Windows 不区分,`UserCenter` 写成了 `usercenter`。现在清单里固定加一条:

• 全部路由用 `php think route:list` 导出来扫一眼,看有没有驼峰和连字符混用
• 带可选参数的路由(比如 `[id]`)单独测不传参数的情况,Nginx 重写规则有时候会在这里翻车
• 如果用了多应用模式,检查 `app.php` 里的 `domain_bind` 或 `app_map`,本地配了域名绑定、生产环境换域名后忘改的惨案我经历过两次

三、菜单与导航:前端后端对不上号最尴尬

后台左侧菜单从数据库读、权限节点从代码里注册,两边不同步的时候,菜单点进去报无权限,或者权限开了菜单找不到。我的做法是:

• 菜单表和权限节点表做 diff,写个小脚本比对两边 `name` 字段是否一一对应
• 如果有「动态菜单」(比如根据用户配置显示不同入口),把开关状态全部置为默认再测一遍,防止本地调试时改的脏数据带上去
• 移动端 H5 的底部导航和 PC 后台菜单分开检查,UniApp 那边 tabBar 的 pagePath 容易和实际路由不一致

四、配置项:本地和生产别靠脑子记

`.env` 文件我已经不敢手动复制了。现在用 `deploy.sh` 脚本自动替换,但清单里还是保留了人工复核点:

• 支付回调地址、OSS 域名、CDN 刷新 URL 这类带域名的,全局搜索替换后必须肉眼过一遍——有次测试环境的 `api.test.com` 漏了一个没改成正式域名,用户付款完跳转到了 404
• 邮件、短信、推送的开关,上线前统一设为"关闭"或"沙箱模式",确认没问题再开
• 日志级别:`level` 如果是 `debug`,上线第一件事改成 `error`,否则磁盘撑爆只是时间问题

五、我现在的执行顺序

代码合并 → 跑自动化测试(如果有的话)→ 按清单逐项打勾 → 最后一步才是切流量或者解封入口。打勾这个仪式感很重要,光靠脑子记真的会漏。

你们有没有那种" checklist 写了但还是栽了"的经历?我这份还在持续补,最近想加上数据库迁移回滚的验证步骤。

评论0
回复 · 0
还没有回复
微信客服 微信客服