我已经坚持这个问题了几天。
我使用Django开发了一个appengine应用程序,我想将Google Cloud SQL用于我的数据库。一切正常,直到我想在发生服务器失败时应用迁移,并出现以下错误:
django.db.utils.OperationalError: (1045, "Access denied for user 'MY_DB_USER'@'MY_IP' (using password: YES)")
我所做的如下:
我按照Django Support页面中的说明操作 开发我的应用程序
为了创建我遵循的第一代Cloud SQL实例 使用Cloud SDK概述了here的步骤。
我使用以下命令行部署了应用程序:
gcloud预览应用部署MY-APP-DIR / app.yaml --version 0-1-0
我授权了我的IP和AppEngine应用程序ID。它们都列在我的SQL实例中“访问控制”下的“授权”部分中。
最后,我尝试使用以下命令行应用迁移:
SETTINGS_MODE ='prod'MY-APP-DIR / manage.py migrate
settings.py
我的settings.py的相关部分如下所示:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
DEBUG = False
# Running on production App Engine, so use a Google Cloud SQL database.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST' : '/cloudsql/[MY-PROYECT-ID]:[MY-CLOUD-SQL-INSTANCE]',
'NAME': '[MY-DB-NAME]',
'USER': 'root',
}
}
elif os.getenv('SETTINGS_MODE') == 'prod':
DEBUG = False
# Running in development, but want to access the Google Cloud SQL instance
# in production.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[MY-DB-NAME]', # db name.
'USER': '[MY-DB-USER]',
'PASSWORD' : '[MY-DB-USER-PASSWORD]',
'HOST' : '[IPV4 ASSIGNED IN GOOGLE CONSOLE]',
'PORT': '3306',
}
}
else:
# Running in development, so use a local MySQL database.
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[MY-LOCAL-DB]',
'USER': 'root',
'PASSWORD': 'root',
}
}
有什么可能导致问题的想法吗?
谢谢!
答案 0 :(得分:0)
我终于找到了问题所在。
为了应用迁移,授予用户数据库访问权限的正确方法如下:
SETTINGS_MODE='prod' PROJECT_DIR/manage.py migrate
作为旁注,请确保主机为root
的localhost
用户没有密码,否则您的App Engine应用程序将无法连接到数据库。
希望这有助于其他人!