Не удается подключить 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
}
}
}