我已经设置了一个默认的django/django-wiki项目。本地测试工作良好。从本地服务器连接到云sql(与google.appengine.ext.django.backends.rdbms
)不工作,我相信由于一些身份验证问题。更重要的是,我不能从生产服务器连接。
我已经确定没有将我的本地MySQLdb
部署在我的虚拟环境目录中。
我有以下app.yaml
:
- name: MySQLdb
version: "latest"
我的DATABASE
条目如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbname',
'USER': 'root',
'PASSWORD': '',
'HOST': '/cloudsql/appname:sqlinstance',
'PORT': '',
}
}
它似乎正在工作,或者至少没有抱怨丢失的包或mysql导入问题。我的问题如下(从生产日志中获得,但也可以通过django调试输出看到):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/MySQLdb-1.2.4b4/MySQLdb/connections.py", line 190, in __init__
super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")
是什么原因导致的?这是否意味着与某事建立了联系,但没有回复?其他帖子似乎提到这是一个问题,当从外部来源连接,但这种连接是从应用引擎AFAIK。
嗯,这比预期的要直接得多。我假设使用我的google帐户创建的云sql在默认情况下只允许访问我的GAE应用程序。这必须显式设置,从Developer Console
-> Storage
-> Cloud SQL
-> instance-name
-> Edit
-> AUTHORIZED APP ENGINE APPLICATIONS
。或者在创建SQL实例时,打开高级选项。
我只是在框中添加了我的应用程序的名称,点击保存,一切都工作了
根据这个,每当一个实例死亡(出于某种原因或其他原因),它将重新启动,当它重新启动时,它只是发出这个错误,直到它准备好接收请求。
你最好的办法是尝试实现指数回退。这种情况多久发生一次?每一次还是偶尔一次?