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

部署Flask应用连接Render PostgreSQL时遇主机名解析错误求助

解决Render部署时PostgreSQL主机名解析错误的问题

针对你遇到的"could not translate hostname 'hostname' to address: Name or service not known"错误,按以下步骤排查修复:

1. 修复数据库URI的语法错误

你的代码中app.config['SQLALCHEMY_DATABASE_URI']赋值时未将URI字符串用引号包裹,这会导致Python解析错误,实际传递给SQLAlchemy的并非正确连接地址:

# 错误写法
app.config['SQLALCHEMY_DATABASE_URI'] = postgresql://web_dev_krgj_user:pass@dpg-cnnkci7sc6pc7399qa6g-a.oregon-postgres.render.com/web_dev_krgj

# 正确写法
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://web_dev_krgj_user:pass@dpg-cnnkci7sc6pc7399qa6g-a.oregon-postgres.render.com/web_dev_krgj'

2. 使用环境变量管理连接信息

你导入了dotenv但未调用load_dotenv()加载环境变量,硬编码密码和地址既不安全,也易在部署环境出现配置不一致问题:

  • 本地开发:在项目根目录创建.env文件,添加:
    DATABASE_URL=postgresql://web_dev_krgj_user:pass@dpg-cnnkci7sc6pc7399qa6g-a.oregon-postgres.render.com/web_dev_krgj
    SECRET_KEY=your-secret-key-here
    
  • Render部署:在服务设置中添加对应环境变量,直接使用Render PostgreSQL实例提供的Internal Database URL(同团队服务优先用内部地址,解析更稳定)或External Database URL
  • 修改代码加载环境变量:
    load_dotenv()  # 加载本地.env文件
    app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL')
    app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
    

3. 检查Render PostgreSQL实例状态

  • 登录Render控制台,确认数据库实例处于运行中状态,未被暂停或终止
  • 若使用外部连接URL,需确保实例的"Allow external connections"选项已开启

4. 清理冗余的数据库引擎代码

你的代码同时创建了独立engine和Flask-SQLAlchemy的db实例,易导致连接冲突,建议统一使用Flask-SQLAlchemy操作数据库,删除以下冗余代码:

engine = create_engine(f'postgresql://web_dev_krgj_user:pass@dpg-cnnkci7sc6pc7399qa6g-a.oregon-postgres.render.com/web_dev_krgj')
Session = sessionmaker(bind=engine)

5. 确认部署依赖完整

确保requirements.txt包含必要依赖:

Flask
Flask-SQLAlchemy
Flask-Login
Flask-WTF
Flask-Migrate
python-dotenv
psycopg2-binary  # PostgreSQL驱动,部署时用此包更适配

按以上步骤调整后重新部署,即可解决主机名解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:20:28