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

