Django: настройки. Базы данных неправильно настроены - PullRequest
0 голосов
/ 25 июня 2019

Я знаю, что я не первый, кто задает этот вопрос, но я все еще не смог найти ответ для своей ситуации.

У меня есть среда Django, которая работает очень хорошо, я знаю, что у меня есть только один (1) settings.py файл, и я знаю, что моя среда обращается к нему правильно.

Я недавно добавил новую конечную точку в свой проект. Я определил его URL в urls.py

urlpatterns = [
    ...
    url(PREFIX + r"^v1/alerts/debug$", alerts_views_v1.debug_trigger_alert_notification),
    ...
]

Он связан с методом, который находится в файле alerts/views_v1.py, но не относится к какому-либо конкретному классу:

@api_view(["POST"])
def debug_trigger_alert_notification(request):
    """
    Trigger an Alert. i.e. Create an Alertnotification.
    This function is meant to be called by the scheduler service.
    """

    workspace_slug = request.data.pop("workspace")
    with in_database(workspace_slug, write=True):
        serializer = AlertNotificationSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            serializer.save()

    return Response()

Когда я отправляю запрос на этот URL, я получаю следующую ошибку 500:

ImproperlyConfigured at /v1/alerts/debug
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

В моем файле settings.py моя переменная DATABASES кажется правильной (хотя она построена окольным путем):

DEFAULT_DATABASES = {
    "default": {  # This DB is supposed to always have the latest version of the schema described by the Django Model
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ["REFERENCE_DB_NAME"],
        "USER": os.environ["DB_USER"],
        "PASSWORD": os.environ["DB_PASSWORD"],
        "HOST": os.environ["DB_HOST"],
        "PORT": os.environ["DB_PORT"],
    }
}

# Retrieve all existing workspace databases:
try:
    _existing_workspace_database_names = ExistingWorkspace(
        db_user=DEFAULT_DATABASES["default"]["USER"],
        db_host=DEFAULT_DATABASES["default"]["HOST"],
        db_password=DEFAULT_DATABASES["default"]["PASSWORD"],
    ).list_existing_workspaces()
except Exception as e:
    log.critical("settings.py: Error retrieving list of existing databases.")
    raise e
else:
    log.info("settings.py: Successfully retrieved list of existing databases.")

WORKSPACE_DATABASES = {
    db_name_to_slug(existing_workspace_database_name): {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": existing_workspace_database_name,
        "USER": os.environ["DB_USER"],
        "PASSWORD": os.environ["DB_PASSWORD"],
        "HOST": os.environ["DB_HOST"],
        "PORT": os.environ["DB_PORT"],
    }
    for existing_workspace_database_name in _existing_workspace_database_names
}

DATABASES = {**DEFAULT_DATABASES, **WORKSPACE_DATABASES}

DATABASE_ROUTERS = ["dynamic_db_router.DynamicDbRouter"]

Что я могу сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...