【问题标题】:GAE Python 3.7 Standard can't connect to Cloud SQL serverGAE Python 3.7 Standard 无法连接到 Cloud SQL 服务器
【发布时间】:2019-06-12 21:11:35
【问题描述】:

我正在学习在 Google App Engine here 上部署 Django 应用程序的教程。我可以使用 cloud_sql_proxy 在本地运行应用程序,但是当我将应用程序部署到 GAE 时,应用程序失败并出现错误:

(2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

检查错误输出,看起来 django 正在尝试按预期连接到/cloudsql/<project>:<region>:<instance> 的 unix 套接字,只是由于某种原因失败了。什么可能导致此问题?

【问题讨论】:

  • 我尚未完成本教程,但我熟悉 App Engine 和 Cloud SQL。您包含的错误 ("Can't connect to MySQL server on 'localhost') 与您的声明相冲突,它看起来像是在使用 /cloudsql/<project>:<region>:<instance> 套接字。该错误表明它不是。查看教程,它确定它是本地的还是使用os.getenv('GAE_APPLICATION', None) 部署的。你改变了这个吗?如果没有,也许要么尝试记录环境变量的值以确认它采用的路径,要么强制它始终使用/cloudsql/... 路径。
  • 是的,我认为这似乎也很矛盾,但是 django 输出了一个连接变量列表,我在那里看到了/cloudsql/<project>:<region>:<instance>。执行该分支是定义它的唯一方法。只是为了确保我将语句设置为 if True 并且我得到了同样的错误。
  • 似乎不满足以下条件,因此它正在尝试建立本地 TCP 连接:if os.getenv('GAE_APPLICATION', None):。尝试查看entire code 以确保您没有遗漏任何内容
  • 如果你明天早上还没解决这个问题,我会试试教程。
  • 它对我有用。我鼓励您仔细检查您是否已按照说明进行操作。

标签: mysql django python-3.x google-app-engine google-cloud-sql


【解决方案1】:

看来问题出在我用于教程的项目上。不知何故,该项目的 Google App Engine 服务帐户已被撤销其权限。恢复这些权限(赋予它编辑角色)后,教程在原始项目上工作。

【讨论】:

    【解决方案2】:

    您需要在 Django 设置中更改数据库连接。

    appengine/standard_python37/django/mysite/settings.py

    settings.py 文件包含 SQL 数据库的配置。 settings.py 中的代码使用 GAE_APPLICATION 环境变量来确定应用是在 App Engine 上运行还是在您的本地计算机上运行:

    当应用在 App Engine 上运行时,它使用 /cloudsql Unix 套接字连接到 MySQL 主机。 当应用在本地计算机上运行时,它使用 TCP 连接到 MySQL 主机,这需要用户名和密码。

    阅读文档底部,here

    编辑:确保您已启用 Cloud SQL API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-25
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2016-12-17
      • 1970-01-01
      • 2020-07-27
      相关资源
      最近更新 更多