Не удается подключить DataStax AstraDB к приложению Django на Google Cloud

Я пытаюсь подключить AstraDB к моему приложению, обслуживаемому gcloud AppEngine. Я использую Django и поэтому использовал django_cassandra_engine. Я хочу оставить Postgres в качестве БД по умолчанию и использовать cassandra в качестве второй БД. Все работает как ожидалось на localhost, но когда я развертываю на gcloud, я получаю ошибку 502 Bad gateway error, а в логах написано:

cassandra.cqlengine.CQLEngineException: Имя соединения 'cassandra' не существует в реестре.

Я использую:

Django==4.1
django-cassandra-engine==1.7.0
cassandra-driver==3.25.0

Мой secure_connect_bundle (ZIP-файл) находится в той же папке, где находится manage.py. Вот мой settings.py:

# [START db_setup]
# [START gaestd_py_django_database_config]
# Use django-environ to parse the connection string
DATABASES = {
    "default": env.db(),
    'cassandra': {
        'ENGINE': 'django_cassandra_engine',
        'NAME': 'brondau_keyspace',
        'TEST_NAME': 'test_db',
        'OPTIONS': {
            'connection': {
                'auth_provider': PlainTextAuthProvider(username=env("ASTRA_CLIENT_ID"),password=env("ASTRA_SECRET")),
                'cloud': {
                    'secure_connect_bundle': os.path.join(BASE_DIR, "secure-connect-brondau-db.zip")
                }
            }
        }
    }  
    }

# If the flag as been set, configure to use proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# [END gaestd_py_django_database_config]
# [END db_setup]

# Use a in-memory sqlite3 database when testing in CI systems
# TODO(glasnt) CHECK IF THIS IS REQUIRED because we're setting a val above
if os.getenv("TRAMPOLINE_CI", None):
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
        }
    }

Просто мысль, но я не думаю, что вам нужна дополнительная группа cassandra в разделе DATABASES. Попробуйте так:

DATABASES = {
    "default": {
        'ENGINE': 'django_cassandra_engine',
        'NAME': 'brondau_keyspace',

В декабре мы (DataStax) провели семинар по Django и Astra DB: https://www.youtube.com/watch?v=tUF_dX0lgt0

Git-репо можно найти здесь: Build A Blog in Python with Django and Astra DB NoSQL Database

Этот раздел репозитория должен помочь в решении вашей текущей проблемы: https://github.com/tomitokko/django-blog-with-astradb/blob/ddc1c2d608e8fc0d6569796775cdfaf503afab94/techblog/settings.py#L92

В любом случае, попробуйте мое предложение и проверьте видео и/или репозиторий для дополнительной помощи.

Итак, проблема заключалась в том, что secure_connect_bundle (ZIP-файл) не мог быть извлечен на AppEngine. Установка 'use_default_tempdir' на True в cloud_config решает проблему. Если вы используете драйвер python для установления соединения, это должно выглядеть следующим образом:

cloud_config= {
        'secure_connect_bundle': ASTRADB_CONNECT_BUNDLE,
        'use_default_tempdir': True
}

Или если вы используете django_cassandra_engine:

'OPTIONS': {
    'connection': {
        'auth_provider': PlainTextAuthProvider(username=env("ASTRA_CLIENT_ID"),password=env("ASTRA_SECRET")),
        'cloud': {
            'secure_connect_bundle': 'secure-brondau-db.zip',
            'use_default_tempdir': True
        }
    }
}
Вернуться на верх