django - 如何解决 cloudsql-docker/gce-proxy 和已部署的 Python 容器之间的连接失败问题
问题描述
我一直致力于将一个简单的 Django 项目部署到 Google Cloud Platform。
然而,部署的应用程序总是失败,基本上是这样的:
Django Version: 2.1.3
Exception Type: OperationalError
Exception Value:
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Exception Location: /env/lib/python3.6/site-packages/psycopg2/__init__.py in connect, line 130
Python Executable: /env/bin/python3
Python Version: 3.6.7
我可以在本地使用完全相同的 django 项目部署 - 连接到已部署的应用程序尝试连接的同一个云 sql 实例,并且工作正常。我可以通过简单地终止本地 cloud_sql_proxy 在本地复制错误。
这告诉我 python/django 应用程序在本地和部署时都运行相同。Cloud SQL 数据库也工作正常,但由于某种原因,我使用的已部署映像 gcr.io/cloudsql-docker/gce-proxy:1.05 无法正常工作,或者我部署的应用程序无法连接到该代理。
我已经部署了几次 Django Polls 应用程序 [ https://cloud.google.com/python/django/kubernetes-engine] ,这是社区众所周知的,并且成功地完成了几次以培养一些熟悉度,然后将相同的步骤应用于我自己的项目作为解决此问题的一种方式。
我的 pod 日志没有显示任何错误。我已经将我的 .yaml 和 Dockerfiles 与许多有效的示例进行了比较,并且没有发现任何问题,SO 上的其他相关问题似乎也没有解决这个问题。
作为一个学习过程,我已经尝试了一天左右的故障排除,但没有取得进一步的进展。
一些帮助解决此问题将不胜感激。
解决方案
我的故障排除中的差距是我不知道检查 pod 日志并没有给我来自 sql-proxy 组件的日志,只有 app 组件。当我检查来自 sql 代理的日志时,很明显没有为该项目启用 Cloud SQL Admin API。启用它可以解决问题。
希望这个答案可以帮助其他谷歌用户。
推荐阅读
- php - 用户登录/注销时隐藏/替换菜单项
- indexing - Lucene 索引 - 导出/查询未“存储”的“索引”文本字段值
- javascript - 无法调用两个 javascript 函数
- c# - 不显示 StandardAssets 的操纵杆
- java - 我的 android 应用程序的数据库 SQLite 的排序结果有问题
- javascript - 无法更新 Set 属性
- javascript - JavaScript 中的反向混合颜色
- discord.js - 丰富的 Minecraft 玩家数量
- c - 使用 OCI 连接池时连接速度很慢
- javascript - 通过 JavaScript 渲染 MathJax 效果不佳