部署Flask API到Heroku时MySQL连接失败致应用崩溃求助
解决Heroku部署Flask API无法连接MySQL的问题
核心原因:Heroku容器里的localhost指的是容器自身,不是你本地电脑的MySQL服务器,所以部署后没法访问本地数据库,直接导致连接失败、应用崩溃。
1. 改用Heroku云端MySQL服务
Heroku提供官方支持的MySQL附加组件,比如ClearDB或JawsDB,直接创建云端数据库实例:
- 打开终端,执行命令创建ClearDB免费实例:
heroku addons:create cleardb:ignite - 创建完成后,Heroku会自动生成
CLEARDB_DATABASE_URL环境变量,里面包含完整的数据库连接信息(用户名、密码、主机、数据库名)。
2. 修改Flask代码,从环境变量读取数据库配置
不要在代码里硬编码localhost等本地配置,改为读取Heroku提供的环境变量,同时保留本地开发的兼容配置:
import os import mysql.connector from flask import Flask app = Flask(__name__) # 处理数据库连接配置 def get_db_config(): # 优先读取Heroku环境变量 db_url = os.getenv('CLEARDB_DATABASE_URL') if db_url: # 解析CLEARDB_DATABASE_URL格式:mysql://user:password@host/db_name _, auth_host_db = db_url.split('://') auth_host, db_name = auth_host_db.split('/') user, pass_host = auth_host.split(':') password, host = pass_host.split('@') return { 'host': host, 'user': user, 'password': password, 'database': db_name } else: # 本地开发用的配置 return { 'host': 'localhost', 'user': '你的本地MySQL用户名', 'password': '你的本地MySQL密码', 'database': '你的本地数据库名' } # 建立数据库连接 db_config = get_db_config() db = mysql.connector.connect(**db_config)
3. 部署后验证
- 查看Heroku环境变量是否正确生成:
heroku config - 实时查看应用日志,确认数据库连接是否正常:
heroku logs --tail
内容的提问来源于stack exchange,提问作者Irtiza Yawar
相关产品推荐
相关产品推荐

