第7课:本地能跑,线上为什么会坏
把线上问题分成构建失败、环境变量缺失、接口错误、浏览器错误和路径错误。
先看一张直觉图
先不要急着修。
请先看这张图:
这张图想告诉你一件事:
线上坏了以后,第一步不是乱改代码,而是判断错误出现在哪里。
你不需要马上看懂每个技术词。
你只要先记住 5 个常见方向:
- 构建失败。
- 环境变量缺失。
- 接口错误。
- 浏览器错误。
- 路径错误。
开始之前
请先拿出第 6 课的“第一次发布记录表”。
你至少应该有:
- 部署平台名称。
- 项目名称。
- 公开网址。
- 是否发布成功。
- 打开后的结果。
- 如果失败,平台或浏览器显示了什么。
如果你还没有公开网址,也可以上这节课。
只要你有部署失败日志,这节课也能帮你。
因为这节课的重点是:
我怎样把线上问题讲清楚。
先看一个小故事
小林的小红书标题助手在本地运行得很好。
他点击发布后,平台显示成功。
他打开公开网址,页面也出现了。
但他输入一句话,点击生成标题,页面一直转圈。
小林说:
它坏了。
先问:
哪里坏了?
小林说:
就是坏了。
再继续问:
页面打不开?
按钮没反应?
接口报错?
API Key 没读到?
还是访问了不存在的地址?
小林发现:
“坏了”太大了,AI 也很难直接判断。
于是他开始收集证据:
公开网址是什么?
我点了哪个按钮?
页面出现什么现象?
部署平台有没有日志?
浏览器有没有红色错误?
他把这些发给 Codex。
Codex 才能开始判断:
这个问题更像是线上环境变量没有配置,或者接口请求失败。
这就是第 7 课要训练的能力。
一、本地能跑,为什么线上会坏
很多人第一次看到线上出错,会以为:
是不是我的项目做错了?
是不是 AI 写得不行?
是不是我不适合做软件?
先不要这样想。
线上和本地不是同一个地方。
本地能跑,只说明:
在你的电脑里,它能运行。
线上能跑,还需要:
- 平台安装依赖成功。
- 构建命令执行成功。
- 输出目录正确。
- 线上环境变量正确。
- 线上接口能访问。
- 浏览器能加载页面资源。
- 用户访问的网址正确。
所以本地能跑、线上坏了,很常见。
这不是能力问题。
这是软件从本地走到线上时,本来就会出现的检查过程。
二、线上问题先分成 5 类
遇到线上问题,先不要把所有东西混在一起。
请先分成 5 类。
| 类型 | 常见现象 | 先看哪里 |
|---|---|---|
| 构建失败 | 平台发布失败,没有生成可打开页面 | 部署日志 |
| 环境变量缺失 | 本地能调用 AI,线上调用失败 | 平台环境变量设置 |
| 接口错误 | 页面能打开,点击后失败或一直转圈 | Network、平台日志、接口返回 |
| 浏览器错误 | 页面空白、按钮没反应、红色错误 | 浏览器 Console |
| 路径错误 | 404、图片丢失、刷新某页失败 | 网址、路由、资源路径 |
你现在不需要完全会修。
你只要先会这样说:
这个错误更像发生在构建阶段。
这个错误更像发生在线上运行阶段。
这个错误更像发生在浏览器里。
这个错误更像是 API 或环境变量问题。
这已经比“坏了”清楚很多。
三、第一类:构建失败
构建失败通常发生在发布平台里。
你可能还没有看到公开网址,或者平台显示:
Build failed
Command failed
Error
这类问题常见原因包括:
- 构建命令写错。
- 安装依赖失败。
- 某个包没安装。
- 输出目录写错。
- 代码在本地没暴露出来的问题,到了构建时才出现。
这时候不要只截图最后一行。
你要复制:
- 平台名称。
- 项目名称。
- 构建命令。
- 输出目录。
- 完整报错日志中最关键的一段。
给 Codex 的说法可以是:
我在部署平台上发布失败了。
本地可以运行。
平台是:____。
构建命令是:____。
输出目录是:____。
下面是部署日志,请帮我判断失败原因,并告诉我先改哪一处。
四、第二类:环境变量缺失
环境变量缺失很常见。
尤其是带 AI 能力的小工具。
本地能调用 AI,不代表线上也能调用。
因为本地的 .env 文件通常不会自动上传到线上。
线上必须在部署平台里单独配置。
常见现象:
- 页面能打开。
- 输入内容后,点击按钮失败。
- 本地可以生成结果,线上不行。
- 日志里出现
API key、unauthorized、missing、undefined之类的词。
这时候不要把真实 API Key 发给别人。
你可以告诉 Codex:
我怀疑是线上环境变量问题。
本地有 .env,但我不确定线上平台是否配置正确。
变量名是:____。
我不会发送真实 API Key。
下面是线上报错,请帮我判断变量名、读取方式或平台配置可能哪里不一致。
注意:
可以发变量名。
不要发真实密钥。
五、第三类:接口错误
接口错误通常发生在页面已经打开以后。
比如:
- 页面能打开。
- 输入框能输入。
- 点击按钮后失败。
- 结果区域一直转圈。
- 页面提示请求失败。
如果你的小工具需要调用 AI、天气、翻译、数据库或自己的后端,就可能遇到接口错误。
常见错误码:
| 错误码 | 先不用背,粗略理解即可 |
|---|---|
| 401 | 可能没有权限,常和 API Key 有关 |
| 403 | 可能被拒绝访问 |
| 404 | 可能请求地址不存在 |
| 429 | 可能请求太多或额度限制 |
| 500 | 可能服务端出错 |
你不需要成为后端工程师。
只需要知道:
接口错误要告诉 Codex:我点了什么、请求了哪里、返回了什么。
可以这样问:
我的线上页面能打开,但点击按钮后接口请求失败。
公开网址是:____。
操作步骤是:____。
浏览器或平台显示的错误是:____。
请帮我判断这是 API Key、请求地址、跨域、额度还是服务端代码问题。
六、第四类:浏览器错误
浏览器错误通常发生在用户看到的页面里。
比如:
- 页面空白。
- 按钮没有反应。
- 某些文字不显示。
- 刷新以后页面变了。
- 图片或样式没有加载。
这时候可以打开浏览器的开发者工具。
但本课不深入讲开发者工具。
你只要知道一个动作:
找到 Console 里的红色错误,复制给 Codex。
如果你不会打开,也可以直接问 Codex:
请一步一步教我在浏览器里打开 Console,并复制线上页面的红色错误。我的浏览器是:____。
拿到红字以后,再这样问:
我的线上页面打开后出现浏览器错误。
公开网址是:____。
操作步骤是:____。
Console 红色错误是:____。
请帮我判断这个错误大概来自哪个文件或哪个功能。
七、第五类:路径错误
路径错误最常见的表现是:
404
Not Found
页面刷新后消失
图片不显示
某个链接打不开
这类问题不一定是功能坏了。
有时只是访问路径、路由配置或资源路径不对。
比如:
- 首页能打开,子页面打不开。
- 从按钮进入某页可以,直接刷新那页不行。
- 图片本地显示,线上不显示。
- 复制的网址少了一段路径。
可以这样问 Codex:
我的线上项目出现路径问题。
公开网址是:____。
哪个地址打不开:____。
是直接访问失败,还是点击后失败:____。
错误显示:____。
请帮我判断是路由、资源路径、部署配置还是网址复制问题。
八、不要只说“坏了”
对 AI 来说,下面这些说法都太模糊:
坏了。
打不开。
没反应。
线上不行。
帮我修一下。
这些话不是不能说。
但只说这些,Codex 很难判断。
更好的说法是:
我本地可以运行,线上打开后点击“生成”按钮失败。
公开网址是:____。
我执行的操作是:____。
我看到的现象是:____。
部署平台日志是:____。
浏览器 Console 错误是:____。
请先判断错误属于哪一类,再告诉我第一步该检查什么。
这段话的力量在于:
它把问题从“情绪”变成了“证据”。
九、动手练习:线上报错分流
请看 5 条简单情况。
请你判断属于哪一类。
| 情况 | 可能类型 |
|---|---|
| 平台显示 Build failed,没有生成网址 | 构建失败 |
| 本地 AI 能回答,线上点击后提示 unauthorized | 环境变量或接口错误 |
| 页面能打开,但按钮点击后一直转圈 | 接口错误或浏览器错误 |
| 线上打开某个地址显示 404 | 路径错误 |
| 页面一片空白,Console 有红字 | 浏览器错误 |
注意:
你不一定要一次判断完全准确。
只要能说出“我应该去哪里找证据”,就已经达标。
十、填写:线上报错描述卡
请你填写下面这张卡。
线上报错描述卡
| 项目 | 我的记录 |
|---|---|
| 项目名称 | |
| 本地是否能运行 | 能 / 不能 / 不确定 |
| 部署平台 | |
| 公开网址 | |
| 问题发生阶段 | 构建失败 / 打开页面 / 点击按钮 / 调用接口 / 刷新页面 / 其他 |
| 我做了什么操作 | |
| 我看到什么现象 | |
| 部署日志关键内容 | |
| 浏览器 Console 错误 | |
| 可能属于哪类问题 | 构建失败 / 环境变量 / 接口错误 / 浏览器错误 / 路径错误 / 不确定 |
| 我已经发给 Codex 的信息 | |
| Codex 建议我先检查什么 | |
| 下一步我要做什么 |
这张卡比“修好了没有”更重要。
因为它训练的是上线之后持续改项目的能力。
十一、给 Codex 的完整提示词
你可以直接复制下面这段。
我正在学习把自己的 AI 小工具发布到线上。
背景:
- 本地是否能运行:____
- 部署平台:____
- 公开网址:____
- 项目类型:____
线上问题:
- 问题发生阶段:构建失败 / 打开页面 / 点击按钮 / 调用接口 / 刷新页面 / 其他
- 我的操作步骤:____
- 我看到的现象:____
- 部署日志关键内容:____
- 浏览器 Console 错误:____
请你不要直接大改项目。
请先帮我判断这个问题更像属于哪一类:
1. 构建失败
2. 环境变量缺失
3. 接口错误
4. 浏览器错误
5. 路径错误
然后请告诉我:
1. 你判断的依据是什么。
2. 我还缺少哪一条证据。
3. 我第一步应该检查哪里。
4. 如果要改代码,请先给我一个最小修改方案。
十二、如果你完全看不懂报错
完全看不懂也没关系。
你可以先这样做:
- 复制公开网址。
- 写下你点了什么。
- 截图或复制页面提示。
- 找到部署日志。
- 如果能打开 Console,就复制红色错误。
- 把这些一起发给 Codex。
你不需要自己猜太多。
但你要给 AI 足够材料。
可以这样说:
我看不懂这个线上错误。
请你先不要假设我懂技术。
请你根据我提供的网址、操作步骤和错误信息,先判断还缺什么证据。
然后一步一步教我去哪里找。
这比直接说“帮我修”更好。
十五、常见误区
误区 1:平台显示成功,就一定没问题
不一定。
平台成功只说明发布流程完成。
还要打开公开网址,测试功能。
误区 2:线上坏了,就说明代码全错了
不一定。
可能只是环境变量没填。
也可能只是路径错了。
误区 3:把 API Key 发给 AI 更方便
不要这样做。
可以说变量名。
不要发送真实密钥。
误区 4:只发截图,不发文字
截图有帮助。
但日志和错误文字更适合让 AI 分析。
能复制文字就复制文字。
误区 5:一上来就让 AI 大改
先让 AI 判断错误类型。
再让 AI 给最小修改方案。
本课最低标准
完成本课,不要求线上问题一定修好。
只要做到下面 4 件事,就算完成:
- 能说出线上问题大概属于哪一类,或明确写“不确定”。
- 能提供公开网址或部署失败日志。
- 能写出自己做了什么操作,以及看到什么现象。
- 能用提示词让 Codex 先判断错误类型,而不是直接乱改项目。
如果你已经修好了线上问题,可以加一项:
记录这次问题最后是怎么解决的。
十七、课后任务
完成“线上报错描述卡”。
如果你的线上项目没有报错,也要做一个模拟练习:
假设你的页面能打开,但点击按钮一直转圈。
请你填写一张线上报错描述卡,写出应该收集哪些证据。
任务提交内容:
- 公开网址或部署失败截图。
- 线上报错描述卡。
- 发给 Codex 的提示词。
- Codex 的第一轮判断。
- 你准备执行的下一步。
十八、本课结束语
第 7 课结束时,你不一定已经修好了所有线上问题。
但你应该知道:
线上坏了不是终点。
线上坏了是一个可以描述、可以分类、可以继续解决的问题。
这比一次成功更重要。
因为真正做项目的人,迟早都会遇到线上问题。
会描述问题,才有机会修好问题。