GAE Django Cloud SQL socket

1 投票
1 回答
965 浏览
提问于 2025-04-18 00:51

我正在尝试在Google App Engine上设置一个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,但我不确定我缺少了什么。

谢谢

1 个回答

2

因为你的本地环境无法识别主机 /cloudsql/something:else,所以它无法连接到这个地址,这个地址只能在生产环境中被识别。

你可以按照以下方法,让它在开发和生产环境中都能正常工作。

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

首先,你需要去 Google Cloud 控制台,给你当前的 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
    }

撰写回答