Heroku 部署失败:Dyno 休眠、H10 应用错误和构建日志怎么看
把一个已经在本地跑通的网站推到 Heroku,国内常见的第一关不是代码,而是 dashboard.heroku.com 登录转圈,或者命令行 heroku login 打不开浏览器。登录成功之后,git push 能传完,打开应用地址却看到 Application error。页面本身几乎不解释原因,原因在日志里。
构建失败、没有网页进程、请求超时、内存超限、机器休眠,是五类不同的日志。只反复推同一个提交,不会让休眠的机器变成不休眠。下面按登录、验证账号、推送、看日志讲。套餐价格和机器规格会变,以官方最新条款为准。
机器档位和现象
低档机器睡觉时,第一个访客会等十几秒甚至看到暂时的错误,刷新后又能开。这和构建失败不是一回事。构建失败时应用根本没有新版本可跑。
| 对比项 | Eco 等低档 | 标准档及以上 | 本地电脑 |
|---|---|---|---|
| 运行 | 一段时间没访问会睡 | 按你开的数量保持 | 你的进程在不在 |
| 唤醒 | 第一次打开要等 | 没有这层睡眠 | 不涉及 |
| 常见页面 | 唤醒慢,不是代码错 | 应用错误要看日志 | 终端里的报错 |
| 日志位置 | 网页活动页或命令行 | 同左 | 你自己的终端 |
| 区域 | 美国或欧洲 | 同左 | 无 |
| 构建 | 同样要过构建 | 同左 | 本地依赖不一定相同 |
| 适合 | 演示、偶尔打开 | 要一直能访问的服务 | 开发调试 |
从登不上到能访问:分步操作
- 第一步:先把线路准备好,连上刺猬VPN。安装客户端后自定义用户名和密码即可完成匿名注册,不需要邮箱、也不需要手机号,免费节点永久免费、不限流量、不限速,注册即用;全程 HTTPS+AES 加密传输。网页控制台和命令行登录用同一条线路,授权页不要换出口。
- 第二步:用无痕窗口打开 dashboard.heroku.com 注册。验证邮件在同一节点下点开。账号若要求补充付款方式才能创建应用,按页面完成,不要找已经失效的免费额度攻略。
- 第三步:安装官方命令行后执行登录。浏览器跳转若失败,改用命令行给出的令牌方式,把令牌贴回终端。令牌不要写进仓库。
- 第四步:在项目里确认有 Procfile,网页服务的那一行要声明网页进程。没有这个文件,平台不知道要跑哪条命令,推送仍可能显示成功。
- 第五步:用 git 推到 heroku 的主分支。看到构建结束并且发布完成,才算有新版本。中途报依赖安装失败,先看构建日志的最后几十行,不要先改 Dyno 数量。
- 第六步:打开应用地址。若是应用错误,立刻看日志尾部。没有网页进程、请求超时、内存超出,日志里的代码不同,处理也不同。
- 第七步:环境变量放在应用的设置页,不要写进代码。缺一个密钥时,进程会在启动时退出,日志里通常有你的程序自己打印的缺项。
- 第八步:要对外一直可访问时,把机器档从会睡眠的那档换成不睡眠的档,并确认数量至少是一。改完看活动页里的状态是不是在运行。
按日志现象排查
先看最新一次发布的日志,再决定改代码还是改档位。
- 打开就是应用错误,日志里说没有网页进程:Procfile 缺失或进程名不对。补上网页进程那一行再发布。
- 日志里是请求超时:一次请求超过平台允许的时间。把慢任务挪到后台,或者缩短这次请求要做的事。加大机器不一定够,超时上限仍在。
- 日志里是内存配额超出:进程占用超过这一档。减并发或升档。反复重启会把访客一直留在错误页。
- 构建阶段依赖安装失败:锁文件和运行时版本不一致。把本地能装过的锁文件一起提交,并在配置里写明运行时版本。
- 推送成功但网站还是旧的:推错了分支,或发布没完成。看活动页最新一条是不是你这次的提交说明。
- 登录页转圈:控制台脚本没加载完。无痕窗口,保持节点,不要同时开着拦截扩展。
- 命令行登录一直等浏览器:授权地址没在同一条线路打开。复制终端里的地址,在已连接的浏览器里打开。
- 半夜能开、白天第一次访问失败:多半是低档睡眠。升到不睡眠的档,或接受第一次唤醒的等待。
和别的托管怎么选
只放静态页时,不一定要一台会睡眠的机器。容器和另外几家的对比见 Render、Railway 与 Fly.io。前端构建挂在网页托管上的步骤见 Vercel 与 Netlify 部署。刺猬VPN自身不对账号设速率上限。实际可用性取决于当前网络环境。
| 对比项 | Heroku | 静态站点托管 | 免费节点只开控制台 |
|---|---|---|---|
| 跑什么 | 带进程的网站和后台 | 构建后的静态文件 | 不负责你的服务器 |
| 失败信号 | 应用错误和日志代码 | 构建日志在对方面板 | 页面打不开 |
| 睡眠 | 低档会睡 | 一般没有这种机器 | 无关 |
| 命令 | 官方命令行和 git | 对方的命令或网页 | 不需要 |
| 线路 | 登录和推送时需要 | 同左 | 永久免费、不限流量、不限速 |
| 长期 | 时长套餐期间不限流量、不限速 | 同左 | 只用来试登录 |
推送之后先读哪一段日志
活动页按时间倒序。你要的是最新一次发布里、进程退出前的那几行,不是几小时前的警告。命令行看日志尾部时,先复现一次错误再看,否则屏幕上是旧记录。
环境变量改完必须重新发布或重启,有的框架只在启动时读配置。只保存设置、不重启,线上仍是旧值,日志里会继续报缺密钥。
同一账号里若有多个应用,命令行要先指定应用名。推到错误的应用上,你会在另一个地址上看不到更新,还以为构建丢了。区域选美国或欧洲以创建应用时为准,创建后不要假设能免费改区域。
附加组件和数据库有自己的连接串。连接串放进环境变量,不要提交。本地用一套、线上用一套,日志里出现拒绝连接时,先对主机名是不是线上那个。
发布之后怎么读日志
发布之后先在活动页确认最新一条就是这次提交,再看日志最末尾进程退出前的几行。几小时前的警告解释不了眼前的错误页。自己打开一次网站再取日志,否则这次的记录根本不会出现。环境变量保存后要重启,已经跑着的进程不会重读配置。
同一账号有多个应用时,命令行必须写上应用名,推到别的应用上会让你在错误地址里找更新。附加的数据库用官方连接串,主机名对不上时日志会写拒绝连接。低档睡眠和构建失败不要混在一次升档里处理,先看日志代码再决定要不要加钱。
运行时版本写在项目配置里,和锁文件一起提交。本地用新版本、线上用旧版本时,构建能过、启动会崩。附加组件的账单和机器的账单是分开的,删掉应用前先摘掉数据库,否则可能继续扣。区域在创建时选定,迁区域等于新建,先备份再动。
演示给别人看之前,用无痕窗口打开应用地址,不要用你已经登录控制台的那个窗口。无痕打不开而你自己能开,说明问题在应用而不是在你的登录态。把这次日志的最后一段存下来,下次同样的报错就能对上是不是旧问题。
依赖里如果有需要编译的模块,构建镜像缺系统库时会在安装阶段失败。这类错误在日志前半段,不要只看最后一句退出。把缺少的库写进构建配置再推,不要在本地反复安装来模拟线上。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| Application error | 进程没跑起来 | 看日志尾部的具体代码 |
| 没有网页进程 | 缺少或写错 Procfile | 补上网页进程再发布 |
| 请求超时 | 单次请求太慢 | 拆任务,不要只加大机器 |
| 内存超出 | 超过这一档配额 | 减占用或更换档位 |
| 构建失败 | 依赖或运行时不符 | 提交锁文件并写明版本 |
| 第一次打开很慢 | 低档机器在睡 | 接受唤醒或换不睡眠的档 |
| 登录转圈 | 控制台未加载完 | 无痕窗口并固定节点 |
高频问答
- 问:推送显示成功为什么还是错误页?答:推送成功只说明收到了代码。进程有没有起来看日志,不看推送结束那一行。
- 问:Eco 睡觉正常吗?答:这一档的设计就是空闲后睡。要一直在线就换档,以价格页为准。
- 问:要不要把数据库端口暴露出来调试?答:不要。用官方给的连接串,从应用里连。
- 问:日志里没有我的报错?答:先自己打开一次网站再取日志。没人访问时,有的错误不会出现。
- 问:区域能改吗?答:以控制台当时的选项为准。改不了就新建应用再迁,不要删库之前不备份。
- 问:命令行和网页哪个为准?答:两边看的是同一个应用。状态不一致时刷新活动页,以最新发布为准。
每次发布只改一个原因
Heroku 应用错误、构建失败、机器睡觉,先分清日志代码。没有网页进程就补启动文件,超时就减单次工作,内存超出就降占用或换档,睡觉是档位特性不是代码坏了。登录和推送保持同一条线路。
刺猬VPN采用 HTTPS+AES 加密传输,支持自定义用户名和密码匿名注册,不需要邮箱和手机号。免费节点永久免费、不限流量、不限速,适合先打开控制台;时长套餐按周期计费,期间不限流量、不限速,适合反复推送和看日志。价格与档位以官方最新条款为准,实际可用性取决于当前网络环境。发布后先看最新日志再决定要不要再推一次。构建日志的前半段如果写缺少系统库,不要只看最后一行退出。需要编译的依赖,把库写进构建配置再推,不要在自己电脑上反复安装来假装线上环境已经一致。演示前用无痕窗口打开应用地址。无痕打不开,就不是你的控制台登录态能解释的。删应用前先确认数据库等附加组件已经卸下,免得机器没了账单还在。配置改完若没有重启,线上仍是旧值,日志会继续报缺密钥。把应用名写在命令里,避免推送到另一个还在计费的旧项目。把页面上的原句抄下来,比只记得打不开更有用。一次只改一个条件,改完再试,确认生效的是哪一次。连续更换出口会让你失去对照,官方页面的说明也比旧攻略可靠。订单号、日志末尾或个人页上的名称,这三样至少记下一样再去问客服。问的时候带上时间,对方才对得上你看到的那一屏。
开始使用刺猬VPN:HTTPS+AES 加密、零日志,匿名注册无需邮箱
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。