Как решить эту ошибку при развертывании на 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

Скриншоты

enter image description here

Ошибка связана с тем, что ваши серверы расположены в разных регионах, поэтому имя хоста должно содержать имя хоста+ URL сервера, например, dpg-ch1ecbbut4m01rpg4ud0-a.frankfurt-postgres.render.com

Извлеките это из URL-адреса внешней базы данных.

Надеюсь, это кому-нибудь поможет.

Вернуться на верх