奇怪而令人沮丧的问题。
有两个django应用程序需要托管在谷歌云上。第一个应用程序当前处于活动状态并正在提供服务,第二个应用程序不会让步。
情况如下:;
两个python 3.8 django应用程序两个不同的云项目,每个项目都有专用的MySQL 8.0实例
当python manage.py在本地运行服务器(app one(,glcoud第一个项目被激活,CLoud_sql_proxy正在侦听连接时,它正确地连接到了Google MySQL实例。
(开发(D:\开发>Cloud_sql_proxy.exe-实例=";someinstance:europe-west2:somename"=tcp:33062021/04/29 13:42:08收听127.0.0.1:3306例如:欧洲西部2:somenam2021/04/29 13:42:08准备好进行新连接
现在,我正在为第二个应用程序做同样的事情(不是同时(,正确激活项目,并根据与第二个Google MySQL实例的连接监听CLoud_sql_proxy的连接。
它不会连接到MySQL实例,而是使用本地实例。
if os.getenv('GAE_APPLICATION',无(:
总是正确的。
有人有什么建议吗?故障排除?也许有人也经历过同样的事情?两个应用程序的工作原理相同,云配置也相同。
设置.py
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
import pymysql # noqa: 402
pymysql.version_info = (1, 4, 6, 'final', 0) # change mysqlclient version
pymysql.install_as_MySQLdb()
# Local development mode 24/04/2020
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/someinstance:europe-west2:somename',
'PORT': '3306',
'USER': 'admin',
'PASSWORD': '8t09q7OG0lx1jAy2',
'NAME': 'bscsportaltest',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
#
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
#
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
os.getenv('GAE_APPLICATION', None)
将以本地形式返回None
,因为默认情况下此变量在您的环境中不存在(除非您手动添加(。在这种情况下,您的应用程序将选择sqlite本地数据库,因为这就是您的代码。
如果您希望在本地连接到Cloud SQL Proxy,那么您需要使用HOST=localhost的配置,而不是sqlite配置。如下所示:
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
import pymysql # noqa: 402
pymysql.version_info = (1, 4, 6, 'final', 0) # change mysqlclient version
pymysql.install_as_MySQLdb()
# Local development mode 24/04/2020
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/someinstance:europe-west2:somename',
'PORT': '3306',
'USER': 'admin',
'PASSWORD': '8t09q7OG0lx1jAy2',
'NAME': 'bscsportaltest',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
#
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
#
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': '[YOUR-DATABASE]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
}
}
查看此链接以了解更多信息。