GAE Django Cloud SQL socket
我正在尝试在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 地址授权
- 进入 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
}