Странная и неприятная проблема.
Имейте два приложения django, которые должны быть размещены в Google Cloud. Первое приложение в настоящее время активно и обслуживается, второе приложение не сдастся.
Ситуация следующая;
Два приложения django на Python 3.8. Два разных облачных проекта с выделенным экземпляром MySQL 8.0.
Когда python manage.py runserver (приложение one) локально с активированным первым проектом glcoud и CLoud_sql_proxy для прослушивания соединений, он правильно подключается к экземпляру Google MySQL.
(Разработка) D:\Development›Cloud_sql_proxy.exe -instances=someinstance:europe-west2:somename=tcp:3306 29.04.2021 13:42:08 Прослушивание на 127.0.0.1:3306 для someinstance:europe-west2:somenam 29.04.2021 13:42:08 Готов к новым подключениям
Теперь я делаю то же самое для второго приложения (не одновременно), правильно активировал проект и CLoud_sql_proxy для прослушивания соединений на основе соединения со вторым экземпляром Google MySQL.
Он не будет подключаться к экземпляру MySQL, вместо этого используется локальный.
если 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. - person dishant makwana   schedule 29.04.2021