在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
相关产品推荐
相关产品推荐

