Как решить эту ошибку при развертывании на render.com: django.db.utils.OperationalError: could not translate host name "***" to address?
Что я пытаюсь сделать: Развернуть мое приложение django на render.com с базой данных postgres. Я следую руководству render.com: Getting Started with Django on Render.
Проблема: Я получаю ошибку журнала сбоя сборки, в которой говорится следующее: django.db.utils.OperationalError: could not translate host name "***" to address: Name or service not known
(здесь я опустил фактическое имя хоста).
Какие исследования я провел: Я много искал ошибку, однако все высоко оцененные решения, которые я встретил, основаны на использовании Docker как это, который я не использую.
settings.py (фрагмент):
import dj_database_url
DEBUG = 'RENDER' not in os.environ
if DEBUG:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
if not DEBUG:
DATABASES = {
'default': dj_database_url.config(default='DATABASE_URL', conn_max_age=600)
}
В моих переменных среды render.com, DATABASE_URL
сохраняется URL postgres, заданный render, который включает имя базы данных, имя хоста, имя пользователя и пароль. Он имеет следующий формат: postgres://USER:PASSWORD@INTERNAL_HOST:PORT/DATABASE
Я сделал следующее, и это работает нормально для меня:
if DJANGO_ENV == 'development':
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
elif len(sys.argv) > 0 and sys.argv[1] != 'collectstatic':
if os.environ.get('DATABASE_URL', None) is None:
raise Exception('DATABASE_URL environment variable not defined')
DATABASES = {
'default': dj_database_url.config(conn_max_age=60, ssl_require=True)
}
Если вы используете render.yaml
для развертывания, то вам необходимо указать регион services
. Регион должен быть таким же, как регион вашей базы данных.
источник: https://community.render.com/t/django-could-not-translate-host-name-to-address/6187/2
render.yaml
databases:
- name: berry
services:
- type: web
name: berry-service
plan: free
env: python
region: singapore
buildCommand: "./build.sh"
startCommand: "gunicorn core.wsgi:application"
envVars:
- key: DATABASE_URL
fromDatabase:
name: berry
property: connectionString
- key: SECRET_KEY
generateValue: true
- key: WEB_CONCURRENCY
value: 4
Скриншоты
Ошибка связана с тем, что ваши серверы расположены в разных регионах, поэтому имя хоста должно содержать имя хоста+ URL сервера, например, dpg-ch1ecbbut4m01rpg4ud0-a.frankfurt-postgres.render.com
Извлеките это из URL-адреса внешней базы данных.
Надеюсь, это кому-нибудь поможет.