我正在尝试将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
}
}
}