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

