无法将 DataStax AstraDB 与 Google Cloud 上的 Django 应用程序连接



我正在尝试将AstraDB与gcloud AppEngine提供的应用程序连接起来。我使用的是Django,因此使用了Django_assandra_engine。我想保留Postgres作为我的默认数据库,并使用cassandra作为第二个数据库。在localhost上一切正常,但当我部署到gcloud时,我收到502 Bad gateway错误,日志中显示:

cassandra.cqlengine.CQLEngineException:连接名称"cassandra"注册表中不存在。

我正在使用:

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

我的secure_connect_bundle(ZIP文件(位于manage.py所在的同一文件夹中。这是我的设置.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': 'the_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-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"),
}
}

只是一个想法,但我认为您不需要在DATABASES部分中添加额外的cassandra组。试试这个:

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

我们(DataStax(实际上在12月举办了一个展示Django和Astra DB的研讨会:https://www.youtube.com/watch?v=tUF_dX0lgt0

Git回购可以在这里找到:用Django和Astra DB NoSQL数据库用Python构建博客

回购的这一部分应该有助于解决您当前的问题:https://github.com/tomitokko/django-blog-with-astradb/blob/ddc1c2d608e8fc0d6569796775cdfaf503afab94/techblog/settings.py#L92

无论如何,给我一个建议,试试看视频和/或回购以获得更多帮助。

所以问题是无法在AppEngine上提取secure_connect_bundle(ZIP文件(。在cloud_config中将"use_default_tempdir"设置为True可以解决此问题。如果您使用python驱动程序来建立连接,它应该是这样的:

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

或者如果您使用django_assandra_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
}
}
}

相关内容

最新更新