You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heroku上正确关联Python aiohttp应用端口?解决H14错误

解决Heroku H14错误:将aiohttp应用的HTTP请求正确路由

这个问题的核心是Heroku的进程类型规则——只有标记为web的进程才会被平台分配HTTP路由,你当前用的worker进程是用来处理后台任务的,Heroku不会把外部HTTP请求转发给它,哪怕你的进程已经在监听端口,也会出现H14(无Web进程运行)的错误。

下面是具体的解决步骤:

1. 修改Procfile的进程类型

把你的Procfile内容从:

worker: python index.py

改成:

web: python index.py

这一步告诉Heroku,这个进程是处理Web请求的服务进程,平台会自动将HTTP流量路由到该进程监听的端口。

2. 确认代码正确监听Heroku的PORT环境变量

确保你的aiohttp代码确实在使用Heroku动态分配的端口,而不是硬编码端口号。示例代码应该类似这样:

import os
from aiohttp import web

async def hello(request):
    return web.Response(text="Hello from aioapp!")

app = web.Application()
app.add_routes([web.get('/', hello)])

if __name__ == '__main__':
    # 从环境变量获取端口,默认8080用于本地测试
    port = int(os.environ.get('PORT', 8080))
    web.run_app(app, port=port)

这里的关键是os.environ.get('PORT')——Heroku会在部署时动态设置这个环境变量,你的应用必须监听这个端口才能被正确访问。

3. 重新部署并验证进程状态

  • 提交修改后的Procfile到Git:
    git add Procfile
    git commit -m "Switch process type to web for HTTP routing"
    
  • 推送到Heroku:
    git push heroku main
    
  • 确保web dyno处于运行状态(如果之前可能没启动的话):
    heroku ps:scale web=1
    

4. 验证修复效果

  • 用heroku ps查看进程状态,应该显示类似web.1: up的状态
  • 用heroku logs --tail实时查看日志,确认web进程正常启动并监听了正确的端口
  • 访问你的Heroku应用URL,应该能正常返回响应

简单总结:Heroku的路由系统只认web类型的进程,把Procfile里的进程类型改成web,再确保代码监听正确的端口,就能解决H14错误了。

内容的提问来源于stack exchange,提问作者Oleksiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:04:30