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

在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()
    # 后续业务逻辑...

为什么之前的路径处理无效?

你手动计算路径的逻辑完全绕远了:

  1. os.path.dirname(os.path.abspath('encouragement.txt'))只会返回当前工作目录,而非文件实际所在的static目录
  2. 手动拼接/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:30:59