django - Google Cloud Run 中的 Django 找不到 /cloudsql 套接字
问题描述
我有一个已构建的 dockerized django 应用程序,上传到 GCR,然后部署为谷歌云运行服务。但是,启动时出现以下错误(来自云运行日志):
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/kingdoms-289503:us-west1:kingdomsdb/.s.PGSQL.5432"?
我的 django 数据库设置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': "/cloudsql/kingdoms-289503:us-west1:kingdomsdb",
'USER': "postgres",
'PASSWORD': "password",
'NAME': "postgres",
}
}
而且我已经确保创建到数据库的连接
据我了解,云运行应该神奇地挂载一个 at /cloudsql django 可以用来连接到 postgres,但错误意味着它没有被挂载。
是否需要检查额外的配置以确保套接字存在?是否有不涉及此套接字的连接到 cloudsql 的替代方法?
解决方案
正如@glasnt 上面提到的,它也可能是 ACL 问题。服务帐户需要该Cloud SQL Client
角色。在默认情况下,Default compute service account
是以 . 结尾的主体 compute@developer.gserviceaccount.com
。
我的问题是我没有选择添加我的新手直觉引导我的角色,即 Cloud Run 服务资源。相反,请转到主 IAM 设置、IAM 选项卡,然后手动将权限添加到服务账户。如果您在列表中没有看到服务帐户,因此无法编辑其角色,您可以转到Add +
(顶部工具栏)并手动输入电子邮件地址。
推荐阅读
- c# - 将 'var' 与 'is' 一起使用会导致 Resharper 说代码在启发式上无法访问
- python - 停止 asyncio.run() 忽略我的代码的剩余部分
- node.js - (node:14) UnhandledPromiseRejectionWarning: ReferenceError: ms is not defined
- java - 如何通过 debezium CDC 机制反序列化从 kafka 代理收到的 BigDecimal 值?
- opencv - 将 GpuMat 直接传递给 cufftExecC2C 函数以进行快速傅立叶变换
- javascript - 如何使用响应对象上的 state() 方法在路由处理程序中设置 cookie?
- php - YouTube Feed 有一个名为 @attributes 的对象,我该如何访问它?
- javascript - 为什么我不能使用 array.indexOf(this.innerHTML)?
- java - 如何每5秒执行一次netty(服务器)
- maven - 如何为某些依赖项禁用“org.jetbrains.intellij”的缓存重定向器?