【问题标题】:GAE Django cloudsql socketGAE Django cloudsql 套接字
【发布时间】:2014-05-12 09:32:15
【问题描述】:

我正在尝试在 Google 应用引擎上设置一个 django 项目,但我似乎无法从我的计算机连接到数据库来执行诸如 syncdb 之类的操作。

这是我的配置(已更改)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/something:else',
        'NAME': 'db_name',
        'USER': 'db_user',
    }
}

现在与数据库的连接可以在已部署的应用程序上运行,但当我从端运行它时,我得到的错误是

Can't connect to local MySQL server through socket '/cloudsql/something:else'

我正在运行 osx,显然我安装了 google cloud sdk 以及 app engine SDK,我不确定我缺少什么。

谢谢

【问题讨论】:

  • 您是否为您的数据库设置了 IP 地址以供外部访问?
  • @PaulCollingwood 不,我不需要它吗?
  • 如果您想从 GAE 应用程序以外的其他东西连接到它,那么您可以这样做,是的,据我所知。您将按每分钟付费。
  • 因为当它使用套接字时,它将使用 oauth2 并且在数据库看来连接来自本地主机,所以如果我通过这种方式,我不需要,至少那是我从 django 教程中了解到的没有提到外部 IP,但我确实读到了与套接字的连接需要授予 localhost 的权限
  • 好吧,恐怕我对此一无所知。 AFAIK 用于外部访问,您需要一个 IP。我相信很快就会有更多知识渊博的人出现:)

标签: python django google-app-engine mysql-python


【解决方案1】:

无法连接,因为您的本地环境无法识别主机/cloudsql/something:else,这只能在生产环境中识别。

您可以按照这些方法使其在开发和生产环境中工作。

在生产环境和本地环境中使用相同的生产 Cloud SQL 实例

首先,您必须继续 Google Cloud Console 以访问您当前的 IP。

授予访问您当前 ip 的权限

  1. 转到 Cloud SQL 控制台,点击您的实例名称。
  2. 点击“编辑”按钮
  3. 在分配 IP 地址中,选择“分配 IP 地址”
  4. 在“授权 IP 地址”下方,在您的开发计算机上添加一个 IP 地址。

数据库设置

然后使用如下设置:

#!/usr/bin/env python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': '<your-database-password>',
        'HOST': '<your-database-ip>',
        'NAME': '<your-database-name>',
    }
}

为生产服务器和开发服务器使用不同的数据库

您可以将生产服务器和本地开发服务器的设置分开:

if os.getenv("SERVER_SOFTWARE", "").startswith("Google App Engine"):
    # production
    DATABASES = {
        # production database settings
    }
else:
    # local dev server
    DATABASES = {
        # local database settings
    }

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2017-06-01
    • 2018-05-27
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2013-12-18
    相关资源
    最近更新 更多