← 返回目录
w6.1概念⏱ 约 7 分钟

DRY-RUN:先空跑一遍,再动真格

把所有写操作的默认行为改成预演,让"忘了加参数"的后果是什么都没发生

🔎 最后验证 2026-08📚 来源:本课产线入库脚本源码与误写生产库事故留档
为什么学这个

前面五个模块讲的所有翻车——结构被模型改掉、内容在转换中丢失、监控里的假绿灯——有一个共同的安慰:内容还在你手里。发现了,改一版,重发,就过去了。

但产线走到最后一步,性质变了。入库、发布、覆盖、群发,这些动作是不可逆的边界:错误内容一旦写进生产库、覆盖了正确数据、发到了收件人手里,就不是"改一版"能解决的了。

我们自己在这条边界上摔过一次,而且摔得很典型:以为在做预演,其实已经写进了生产库。这一节讲的就是那次事故换来的规矩——DRY-RUN 默认预演。学完这节,你会给自己产线里的每个不可逆环节,立下一条书面的安全规则,并亲手走一遍。

💡 打个比方

婚礼彩排是件很聪明的事:全部流程走一遍——进场、宣誓、交换戒指——就是不领证。所有会出错的环节都提前暴露了,但没有任何后果是不可撤销的。

DRY-RUN(空跑预演) 就是给产线的"写操作"做婚礼彩排:脚本完整模拟执行,把"将要写入什么"全部打印出来,但不真正写入数据库或线上系统。确认无误后,再加一个明确的参数(比如 --apply)才动真格。

一次真实的误写事故

这条规矩不是我们凭空想出来的,是撞出来的。我们的产线上曾有四个老的入库脚本,不加任何参数就直接写生产库——而且真的误写过:操作的人以为自己在做"预演",看一眼将要写什么,实际上那一眼看到的内容已经进了生产库。

事故本身不复杂,复杂的是它暴露的机制:出错的不是某个人不小心,而是默认行为的方向放反了。脚本的默认动作是"写",谨慎才需要额外记住什么——那么只要操作次数够多,总有一次会忘。

事故之后,所有写库脚本全部补上了 DRY-RUN 默认模式,一个不漏:不加参数,只打印"将要写入什么"的清单;真正入库,必须显式加 --apply

两条比事故更重要的规则

从这次事故里提炼出来的东西,比事故本身更值得带走:

第一,默认值就是安全线。 不是"提供一个 dry-run 选项",而是"默认就是 dry-run,真写才需要额外动作"。人在疲劳、赶时间的时候,永远会用默认行为——那就让默认行为不可能造成损失。安全不该依赖"记得住",该依赖"忘了也没事"。

第二,闸门要在所有写操作之前,不是大部分。 假如四个脚本只补了三个,剩下那个就是下一次事故的入口——因为你会习惯性地以为"我们的脚本都是默认预演的"。所以我们补的时候是全量补,你也应该是:排查一次,列全清单,一个不漏。

⚠️默认=写
忘加 --dry-run,错误内容直接进生产库,不可撤销
🚧默认=预演
忘加 --apply,只打印清单,什么都没发生
确认后 --apply
人看过清单、明确同意,才动真格
同一个脚本,两种默认方向的后果

换别的工具怎么做

这条原则完全不依赖任何特定工具,它只关心一件事:在不可逆动作之前,插入一个完整但无后果的预演步。

  • 你的"写操作"是发公众号?DRY-RUN 就是先存草稿、用预览链接从头读一遍。
  • 是覆盖一个多人共享的文档?先另存副本,diff 对比新旧两版,确认后再替换。
  • 是给客户群发邮件?先只发给自己,收到后以收件人视角检查,再放开名单。

形式随工具变,结构不变:预演 → 看输出 → 明确确认 → 执行。

🔧 动手做:给你的不可逆环节立规矩(8 分钟)

  1. 列出你产线(或日常工作)里所有"做了就收不回"的环节:发布、覆盖、入库、群发、删除……至少找出 1 个,能找 3 个更好。
  2. 为每个环节写一条规则,格式固定:"环节:。默认行为:只预演,输出'将要做什么'清单。真正执行的条件:(一个明确的额外动作)。"
  3. 挑其中一个环节,模拟执行一次:走完预演,看输出,确认无误,再真做(或者今天就停在预演这一步,也算完成)。

你会看到:至少一条书面的 DRY-RUN 规则,以及一次亲手走过的"预演 → 确认 → 执行"完整流程。

为什么:规则只有写下来、走过一遍,才会在你下次赶时间时真正生效。这一步是把"我知道要谨慎"变成"我的默认流程就是谨慎"。

❓ 测验
给一个会写生产库的脚本加安全机制,下面哪种做法最符合本节的原则?
⚠️ 避坑补了大部分,等于没补

四个危险脚本只改了三个,比一个都不改更危险:你会形成"我们的脚本都默认预演"的错误安全感,而剩下那个就是下一次事故。排查写操作必须全量,闸门放在所有写操作之前——这也是我们事故后全量补齐、一个不漏的原因。

✅ 小结

写操作是不可逆的边界,过了这条线就没有"改一版"可言。DRY-RUN 的关键不是"有预演选项",而是默认就是预演,让忘记参数的后果是零。这条原则零工具依赖:发布、覆盖、群发,都能插入一个完整但无后果的预演步。下一节讲另一道信任闸门——你写下的每个数字,凭什么让人信?

下一节 → 每个数字可用命令复现
🔎 来源与核验· 2 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「四个老入库脚本不加参数直接写生产库,曾发生“以为在预演、实际已写入”的误写事故,事故后全部补上 DRY-RUN 默认模式」
📚 产线一手记录《工作流是怎么设计的》(入库脚本源码与事故留档)✓ 已核验 2026-08
「DRY-RUN 定义为“入库脚本默认只展示将要写什么,不真写数据库”」
📚 产线一手记录《工作流是怎么设计的》(工作流设计文档)✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · w6.2
每个数字可用命令复现:给数字留一张小票
继续读下一节 →