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

Django部署Railway遇数据库主机名解析错误求助

解决Django部署Railway时数据库主机名解析错误

问题原因

postgres.railway.internal是Railway平台的内部私有域名,仅在Railway的部署环境中可被解析,本地机器的DNS无法识别该域名,因此执行runserver或migrate时会出现主机名解析失败的错误。

解决方案

1. 区分本地与生产环境的数据库配置

通过环境变量判断运行环境,本地使用原有数据库配置(如SQLite或本地PostgreSQL),生产环境使用Railway提供的数据库变量。

修改settings.py代码如下:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 判断是否为Railway生产环境
IS_RAILWAY = os.getenv('RAILWAY_ENVIRONMENT') is not None

DATABASES = {}
if IS_RAILWAY:
    # Railway生产环境数据库配置,直接读取平台自动注入的环境变量
    DATABASES['default'] = {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('PGDATABASE'),
        'USER': os.getenv('PGUSER'),
        'PASSWORD': os.getenv('PGPASSWORD'),
        'HOST': os.getenv('PGHOST'),
        'PORT': os.getenv('PGPORT'),
    }
else:
    # 本地环境数据库配置(保留你原本运行正常的配置,比如SQLite)
    DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }

2. 若需本地连接Railway数据库(可选)

如果想在本地调试时直接连接Railway的PostgreSQL数据库,需在Railway控制台开启数据库的公网访问权限,然后替换配置中的HOST为Railway提供的公网主机地址,同时更新PORT为对应的公网端口,不要使用内部域名postgres.railway.internal。

3. 验证配置

  • 本地运行:执行python manage.py runserver,会自动切换到本地数据库配置,正常启动服务。
  • Railway部署:平台会自动注入PGDATABASE、PGUSER等环境变量,无需额外手动配置即可连接内部数据库。

内容的提问来源于stack exchange,提问作者M.creations

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:58:14