Heroku部署Flask应用遇/[GET]异常及TemplateNotFound错误求助
根据你提供的日志和目录结构,问题核心是Heroku服务器上找不到home.html模板文件,但本地运行正常。下面是针对性的排查和解决步骤:
1. 确认模板文件已被Git跟踪并推送到Heroku
本地运行正常但Heroku找不到文件,最常见的原因是templates目录没被提交到Git,导致Heroku部署时没有包含这些文件:
- 先检查
.gitignore文件,确认没有添加templates/这类会排除模板目录的规则 - 执行命令查看Git跟踪状态:
git status - 如果
templates下的文件显示为未跟踪状态,执行以下命令提交并推送:git add templates/ git commit -m "Add all template files" git push heroku master
2. 显式指定Flask的模板文件夹路径
默认情况下Flask会自动识别根目录下的templates文件夹,但Heroku的环境中偶尔会出现相对路径解析异常。可以在初始化Flask应用时显式声明模板路径:
from flask import Flask # 明确指定模板文件夹位置 app = Flask(__name__, template_folder='templates')
这样能确保Flask在任何环境下都能精准定位到模板文件。
3. 检查文件名大小写一致性
Heroku基于Linux系统,文件系统区分大小写;而本地如果是Windows系统则不区分。确认代码中render_template('home.html')的文件名和实际文件的大小写完全匹配,避免出现代码写Home.html但实际文件是home.html的情况。
4. 验证Heroku服务器上的文件结构
可以通过Heroku CLI直接查看服务器上的文件,确认templates目录和文件是否存在:
# 查看根目录结构 heroku run ls -la # 查看templates目录下的文件 heroku run ls templates/
如果看不到home.html,说明文件确实没被部署到Heroku,回到步骤1重新处理Git提交。
5. 确认Procfile的路径配置
你的Procfileweb: gunicorn Credit:app配置是正确的,但要确保Credit.py确实在项目根目录下,和templates文件夹处于同一层级。如果Credit.py在子目录中,需要调整Procfile路径(比如web: gunicorn subdir.Credit:app),但根据你的目录结构,这应该不是问题。
按照以上步骤排查后重新部署,应该就能解决TemplateNotFound的错误了。
内容的提问来源于stack exchange,提问作者Shrikant Bhardwaj

