在Heroku部署Flask应用遭遇IsADirectoryError问题求助
解决Heroku部署Flask应用无法读取static目录文件的问题
错误根源
你当前的IsADirectoryError是因为把目录路径当成文件路径传给了open()函数——你之前计算的file_dir最终指向的是文件夹(本地项目根目录或Heroku上的/app),而非encouragement.txt的完整路径。
正确的文件路径写法
Flask本身提供了app.root_path属性,可以直接获取应用根目录(即app.py所在的目录),用它来拼接文件路径最可靠,还能自动适配本地和Heroku环境:
from flask import Flask import os app = Flask(__name__) @app.route("/") def index(): # 拼接static目录下encouragement.txt的完整路径 file_path = os.path.join(app.root_path, "static", "encouragement.txt") with open(file_path, encoding="utf-8") as f: messages = f.read() # 后续业务逻辑...
为什么之前的路径处理无效?
你手动计算路径的逻辑完全绕远了:
os.path.dirname(os.path.abspath('encouragement.txt'))只会返回当前工作目录,而非文件实际所在的static目录- 手动拼接
/app属于画蛇添足——Heroku确实会把项目部署到/app目录,但app.root_path已经自动帮你处理了这层路径,不需要硬编码
验证文件结构的正确方式
如果heroku bash无输出,改用heroku run bash进入容器,执行ls -R就能看到完整的文件结构,确认/app/static/encouragement.txt是否存在。
无关配置清理
你添加的index.php和composer.json是PHP项目的配置,和Flask完全无关,直接删除即可。
临时方案的替代
把文件内容硬编码到app.py只是权宜之计,用上面的路径写法就能正常读取文件,不用牺牲代码可维护性。
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

