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

切换Heroku-PostgreSQL后,Python网站调用os.environ.get出现H10错误

问题:Heroku部署切换PostgreSQL后应用崩溃(H10错误)

问题背景

  • 原本使用MySQL作为数据库时,Heroku上的应用运行无报错
  • 添加Heroku-PostgreSQL插件后,修改数据库配置触发H10崩溃错误,错误日志如下:

"sqlite:///portfolioswebsite.db"at=error code=H10 desc="App crashed" method=GET path="/" host=gokay-blog.herokuapp.com request_id=4e41ecde-2141-4ae4-a3f5-1de1896a10ab dyno=web.1 connect=5000ms service= status=503 bytes= protocol=https

配置变更

  • 修改前的数据库配置:

app.config['SQLALCHEMY_DATABASE_URI'] ="sqlite:///portfolioswebsite.db"

  • 修改后的配置(触发错误):

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get("DATABASE_URL", "sqlite:///portfolioswebsite.db")

当前Procfile配置

web: gunicorn main:app

排查与解决建议
  • 修正连接URL格式:Heroku提供的PostgreSQL连接URL前缀是postgres://,但SQLAlchemy 1.4及以上版本要求使用postgresql://,需做替换。修改配置代码如下:
    db_url = os.environ.get("DATABASE_URL", "sqlite:///portfolioswebsite.db")
    if db_url.startswith("postgres://"):
        db_url = db_url.replace("postgres://", "postgresql://", 1)
    app.config['SQLALCHEMY_DATABASE_URI'] = db_url
    
  • 确认依赖完整性:确保项目的requirements.txt中包含psycopg2-binary,这是Python连接PostgreSQL的必要依赖,缺失会导致数据库连接失败
  • 查看详细崩溃日志:通过Heroku CLI执行heroku logs --tail命令,查看实时应用日志,获取崩溃的具体原因(如连接超时、表结构不匹配等)
  • 同步数据库结构:由于之前使用MySQL,切换到PostgreSQL后需确保表结构兼容。可借助Flask-Migrate工具执行迁移命令,同步数据库表结构到PostgreSQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:36:25