Python 3.8 DJANGO GCLOUD问题
Python 3.8 DJANGO GCLOUD issue
奇怪且令人沮丧的问题。
有两个需要托管在 Google 云上的 django 应用程序。第一个应用程序当前处于活动状态并正在提供服务,第二个应用程序不会让步。
情况如下;
两个 python 3.8 django 应用程序
两个不同的云项目,每个项目都有专用的 MySQL 8.0 个实例
当 python manage.py 在本地运行服务器(应用程序一)并激活 glcoud 第一个项目并且 CLoud_sql_proxy 正在侦听连接时,它会正确连接到 Google MySQL实例.
(开发)D:\Development>Cloud_sql_proxy.exe -instances="someinstance:europe-west2:somename"=tcp:3306
2021/04/29 13:42:08 在 127.0.0.1:3306 上监听 someinstance:europe-west2:sonam
2021/04/29 13:42:08 准备新连接
现在我正在为第二个应用程序做同样的事情(不是同时进行),激活正确的项目并且CLoud_sql_proxy根据与第二个应用程序的连接侦听连接GoogleMySQL实例。
它不会连接到 MySQL 实例,而是使用本地。
if os.getenv('GAE_APPLICATION', None):
总是正确的。
有人有什么建议吗?故障排除?也许有人经历过同样的事情?两个应用一脉相承,云配置也一样。
Setting.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)
将 return None
在本地,因为默认情况下此变量在您的环境中不存在(除非您手动添加它)。在这种情况下,您的应用程序将选择 sqlite 本地数据库,因为这就是您拥有代码的方式。
如果您希望在本地连接到云 SQL 代理,那么您需要使用 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]',
}
}
查看 this link 了解更多信息。
奇怪且令人沮丧的问题。
有两个需要托管在 Google 云上的 django 应用程序。第一个应用程序当前处于活动状态并正在提供服务,第二个应用程序不会让步。
情况如下;
两个 python 3.8 django 应用程序 两个不同的云项目,每个项目都有专用的 MySQL 8.0 个实例
当 python manage.py 在本地运行服务器(应用程序一)并激活 glcoud 第一个项目并且 CLoud_sql_proxy 正在侦听连接时,它会正确连接到 Google MySQL实例.
(开发)D:\Development>Cloud_sql_proxy.exe -instances="someinstance:europe-west2:somename"=tcp:3306 2021/04/29 13:42:08 在 127.0.0.1:3306 上监听 someinstance:europe-west2:sonam 2021/04/29 13:42:08 准备新连接
现在我正在为第二个应用程序做同样的事情(不是同时进行),激活正确的项目并且CLoud_sql_proxy根据与第二个应用程序的连接侦听连接GoogleMySQL实例。
它不会连接到 MySQL 实例,而是使用本地。
if os.getenv('GAE_APPLICATION', None):
总是正确的。
有人有什么建议吗?故障排除?也许有人经历过同样的事情?两个应用一脉相承,云配置也一样。
Setting.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)
将 return None
在本地,因为默认情况下此变量在您的环境中不存在(除非您手动添加它)。在这种情况下,您的应用程序将选择 sqlite 本地数据库,因为这就是您拥有代码的方式。
如果您希望在本地连接到云 SQL 代理,那么您需要使用 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]',
}
}
查看 this link 了解更多信息。