GAE Django cloudsql 套接字

Posted

技术标签:

【中文标题】GAE Django cloudsql 套接字【英文标题】:GAE Django cloudsql socket 【发布时间】: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。我相信很快就会有更多知识渊博的人出现:) 【参考方案1】:

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

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

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

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

授予访问您当前 ip 的权限

    转到 Cloud SQL 控制台,点击您的实例名称。 点击“编辑”按钮 在分配 IP 地址中,选择“分配 IP 地址” 在“授权 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
    

【讨论】:

以上是关于GAE Django cloudsql 套接字的主要内容,如果未能解决你的问题,请参考以下文章

从GAE连接到两个cloudsql实例

无法通过 unix 套接字从托管在不同 GCP 项目中的 App Engine 柔性环境连接到 Cloud SQL

GAE 地区 - 确切位置

Cloud SQL 代理错误 - 尝试以访问权限禁止的方式访问套接字

GAE + Cloud SQL - 如何理解不同的层

Django 单元测试故障转移域套接字