我无法通过生产服务器上的Google App Engine(灵活)中的Django连接到CloudSQL。我正在使用Python 3,如果这有所作为。
我在 settings.py :
中使用此示例DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/<your-project-id>:<your-cloud-sql-instance>',
'NAME': '<your-database-name>',
'USER': 'root',
}
}
(当然,填写了ID。)
当我使用插座时,我根本无法连接:
无法通过套接字连接到本地MySQL服务器'/ cloudsql / projectid:cloudsqlid'(2)
当我尝试使用IPv4而不是套接字时,我能够连接到数据库,但后来我收到了这个错误:
在“读取初始通信数据包”时失去与MySQL服务器的连接
更奇怪的是,当我尝试在本地服务器上连接到CloudSQL时(当然使用IPv4),我能够很好地连接。只有部署的应用才能给我带来麻烦。
这是我的 app.yaml
runtime: python
threadsafe: true
vm: true
entrypoint: gunicorn -b :$PORT myapp.wsgi:app
runtime_config:
python_version: 3
它说<your-cloud-sql-instance>
,我假设它是指SQL实例的ID。但我也注意到SQL实例的“概述”,它说Instance connection name: projectid:us-central1:cloudsqlid
。我尝试使用此连接名称代替<your-project-id>:<your-cloud-sql-instance>
而没有运气。
以下是特定于CloudSQL和Django的Google App Engine文档的引用:
The Google Cloud SQL instance to which you're connecting, in the format '/cloudsql/your-project-id:your-instance-name' or '/cloudsql/domain:your-project-id:your-instance_name'.
这里说有两种连接通过套接字的方式(为什么?我不确定),但添加“domain:”似乎也无济于事。
我不能肯定地说我尝试了上述各种变化的组合,所以我可能错过了一些东西。
我更喜欢通过套接字连接,而不是IPv4。