漏配一个环境变量让 App 上线即崩,我还弄丢了 Play Store 测试连胜
来源:dev.to — 2026-09-05
📋 概述
作者用 Expo + React Native 为房东做租房管理应用 RentDera,发布 v1.1.0(编辑物业/单元/租客、循环费用、Google 登录、多币种、尼泊尔语等)后离开去过节,半小时内就被封闭测试者报告 App 启动即崩。原因小到几乎尴尬:生产构建漏配了一个环境变量 EXPO_PUBLIC_LEGAL_BASE_URL,本地 .env 有值所以一切正常,发布版里它是 undefined,读取它的代码启动即炸。他本已把每个环境变量接入 Zod 校验模块、缺失就抛错,验证确实在尽责——崩了,因为值缺失;缺口在 CI/发布流水线从未注入该变量:校验能抓坏值,却造不出你从未提供给构建的值。
🔑 核心要点
- 生产启动即崩的根因小到令人尴尬:漏配 EXPO_PUBLIC_LEGAL_BASE_URL,本地 .env 有值所以开发一切正常,发布构建里它 undefined、读取代码启动即炸
- 关键教训:缺失的环境变量应在构建时大声失败,而不是静默上线再让用户崩——Zod 校验模块确实抛了错,但它造不出从未被注入的值,真正的缺口在 CI/发布流水线
- 第二个 bug 更难啃:原生 Google Sign-In 涉及每个平台的 OAuth client ID、Android SHA-1 指纹、release keystore 与 debug 不同,作者当晚只做了初步排查
- 最扎心的不是 bug:个人开发者上架要求封闭测试里 12 名测试者连续活跃 14 天,他已在第 5 天——今晚一名测试者退出,连胜清零,无申诉无恢复
- 给独立移动开发者的四条建议:校验环境变量之外必须核实发布流水线真注入、务必冒烟测试 production build 而非只测 dev、超募测试者建立缓冲、发版让人谦卑但仍要继续发
💡 金句
一个生产事故你可以一小时热修掉,但失去的日子补不回来——那比这两个 bug 任何一个都更让我心疼。
👍 0
👎 0
← 返回 dev.to 首页