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

在Heroku用Gunicorn部署Flask时,add_url_rule引发404问题

解决Flask用add_url_rule在Heroku部署返回404的问题

嘿,我来帮你搞定这个404的问题!这种情况大概率是踩了两个常见的坑,咱们一步步排查:

1. 你是不是忘记显式绑定路由了?

@app.route('/')装饰器其实是帮你偷偷调用了add_url_rule,但手动用这个函数的时候,必须自己写绑定代码。如果你的代码里只定义了函数a,但没把它和根路径关联起来,那自然找不到路由。

正确的代码应该是这样:

from flask import Flask
app = Flask(__name__)

def a():
    return "b"

# 关键!必须加上这一行,把函数a和根路径绑定
app.add_url_rule('/', view_func=a)

if __name__ == "__main__":
    app.run()

2. 别把路由绑定放在if __name__ == "__main__"块里!

这是最容易踩的坑!很多人会不小心把add_url_rule写在这个判断里面,本地运行python app.py的时候没问题,但Heroku用Gunicorn启动时,不会执行这个代码块——因为Gunicorn是导入你的模块,而不是直接运行它,此时__name__不是__main__,所以路由根本没被添加,自然返回404。

错误示例(千万别这么写):

from flask import Flask
app = Flask(__name__)

def a():
    return "b"

if __name__ == "__main__":
    # Gunicorn启动时不会执行这里,路由白绑定了!
    app.add_url_rule('/', view_func=a)
    app.run()

3. 检查Heroku的Procfile配置

确保你的Procfile里的启动命令正确,比如如果你的Flask文件叫app.py,实例名叫app,那Procfile应该是:

web: gunicorn app:app

如果你的文件名或者实例名不一样,要对应修改,比如文件叫main.py,实例叫my_app,那就是web: gunicorn main:my_app。

本地测试验证

部署前可以本地用Gunicorn测试,比如运行gunicorn app:app,然后访问localhost:8000,如果也返回404,那问题肯定在代码里,先把本地的问题解决再部署到Heroku。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:35