义父令:「将带有测试字样的数据全部清理掉,小程序提审尽量用真实一些的模拟数据」。
上一轮我只清了 packages,那是孤例思维。这次全库扫 176 张表才发现,
游客一眼能看到的地方还留着一堆:
| 表 | 原内容(举例) |
|---|---|
merchants.name | 测试商户001号 |
service_items | seed_hotel_标准 / 测试hotel服务 |
guide_articles | test_seed_story_001 / 测试游客001 |
order_items.item_name | 测试套餐002 |
orders.contact_name | 测试游客001 |
key_tasks | 测试福钥任务1-checkin |
users.nickname | 冒烟测试员 |
kora_routes.name | 冈仁波齐转山 3 日顺时针(测试数据) |
提审标准比"能用"严:任何一处「测试 / DEMO / seed_」都会被挑。
这是最关键的一步——不是扫到什么就改什么。
商户名、服务项、攻略 slug 与署名、转山线路名、福钥任务、工分任务、
用户昵称、订单商品名、订单联系人、求救消息、后台备注。
手法:用 数组 + row_number 循环取值替换成真实内容,
不为几百行手写几百段文案。
改了会破坏业务,而且它们本来就不给游客看:
| 标识 | 为什么不能改 |
|---|---|
users.openid / trial_openids.openid | 登录标识,改了用户登不上 |
redemption_codes.code_no | 券码本身,改了券就废 |
restaurant_tables.qr_token | 扫码标识,改了桌码失效 |
schema_migrations.filename | 迁移文件记录,属基础设施 |
guides.body_html 里「出发前学会操作、测试一次」—— 正常正文system_settings.description 里的 is_test —— 字段名说明最初用 %test%,结果英文 latest / contest / prototype 全被当成测试字样,
guides.body_html 就是这么误报的。收紧为「test 必须是独立词或前后有分隔符」后,
命中从 36 处降到 30 处。
098 清 order_items 时 WHERE 只写了 ILIKE '%测试%',
漏掉 41 条名为「seed_额外服务」的明细——扫描用的却是 %seed\_%。
⇒ 补 099 迁移。
教训:清理的 WHERE 要从扫描的模式原样复制,别凭印象重写。
按纪律先 staging 验(幂等重跑影响 0 行),再上 prod。
prod 最终全库扫描只剩 6 处,全部是上面刻意保留的:
52 users.openid (登录标识)
42 trial_openids.openid (体验白名单)
8 restaurant_tables.qr_token(扫码标识)
7 schema_migrations.filename(基础设施)
1 guides.body_html (误报·正常正文)
1 system_settings.description(误报·字段名说明)
C端 三个公开接口实测「测试 / test / seed_ / DEMO / demo」各 0 次:
商品:冈仁波齐外转山·3天2晚经典线 2880.0
攻略:冈仁波齐转山完整指南 | 路线
推荐:冈仁波齐外转山·3天2晚 2880
| 文件 | 内容 |
|---|---|
backend/sql/098_clean_test_wording.sql | 展示类测试字样全量替换(幂等) |
backend/sql/099_clean_seed_item_name.sql | 补漏:订单明细 seed_ 前缀 |
scripts/scan_test_wording.py | 全库扫描脚本(转正,提审前可随时复查) |
trial_auto_accept:当前 false(仅白名单),提审期建议保持bo_ready 建议先关掉再提审/images/content/ 目录为空,guides 封面会 404(他人域,未改)