Пытаясь запустить приложение Django на App Engine flex, получаем Server 502 при доступе к обработчику
Я создаю простую страницу входа в систему. Вы можете войти в систему, используя учетную запись Django или Google Sign-In. Сначала я пытаюсь проверить, что вы можете войти, используя учетную запись Django.
Он развертывается правильно, и я могу получить доступ к сайту должным образом.
Но когда я захожу в Django /admin
и ввожу учетные данные для входа, помимо того, что загрузка занимает вечность, я продолжаю получать Server 502 Bad Gateway
В документации только смутно упоминается в самом низу, что app.yaml может быть настроен неправильно, но я не достаточно опытен, чтобы определить, какая часть не настроена.
# [START runtime]
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT [myproject.wsgi]
beta_settings:
cloud_sql_instances: [instance]:asia-east2:[project]
automatic_scaling:
min_num_instances: 1
max_num_instances: 1
max_concurrent_requests: 80
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
runtime_config:
python_version: 3
# [END runtime]
Релевантный журнал ошибок:
2021-08-19 20:12:44 default[20210820t040009] "GET /admin/" 302
2021-08-19 20:12:44 default[20210820t040009] "GET /admin/login/?next=/admin/" 200
2021-08-19 20:12:44 default[20210820t040009] "GET /static/admin/css/nav_sidebar.css" 404
2021-08-19 20:12:44 default[20210820t040009] "GET /static/admin/css/responsive.css" 404
2021-08-19 20:12:44 default[20210820t040009] "GET /static/admin/css/login.css" 404
2021-08-19 20:12:44 default[20210820t040009] "GET /static/admin/css/base.css" 404
2021-08-19 20:12:44 default[20210820t040009] "GET /static/admin/js/nav_sidebar.js" 404
2021-08-19 20:13:24 default[20210820t040009] [2021-08-19 20:13:24 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:13)
2021-08-19 20:13:24 default[20210820t040009] [2021-08-19 20:13:24 +0000] [13] [INFO] Worker exiting (pid: 13)
2021-08-19 20:13:24 default[20210820t040009] [2021-08-19 20:13:24 +0000] [15] [INFO] Booting worker with pid: 15
2021-08-19 20:13:24 default[20210820t040009] "POST /admin/login/?next=/admin/" 502
2021-08-19 20:13:43 default[20210820t040009] "GET /nginx_metrics" 200
Эта ошибка обычно означает, что сервер не смог проксировать запрос. Существует множество возможных проблем, поэтому хорошей отправной точкой будет выполнение этой команды, чтобы открыть журнал ошибок и устранить неполадки
sudo tail -F /var/log/nginx/error.log
Я не знаю точно, почему. Но мне пришлось изменить детали в моем settings.py
Я попросил знакомого, который ранее выполнял развертывание в Google Cloud, дать мне рекомендации.
После проверки разницы, главным было то, как HOST
было настроено в отношении DATABASE.
Я сделал вот что.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[DATABASE NAME]',
'HOST': '[IP Address based on Public IP on the Google Cloud SQL Instance]',
'USER': '[SQL USER]', # Cloud
'PASSWORD': '[SQL PASSWORD]', # Cloud
}
}
Они сделали вот что.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '[DATABASE NAME]',
'HOST': '/cloudsql/[instance]:asia-east2:[project]',
'USER': '[SQL USER]', # Cloud
'PASSWORD': '[SQL PASSWORD]', # Cloud
}
}
Ближайшая ссылка, которую я смог найти в документе, была здесь, а именно в разделе Connect with Unix sockets
После правильной настройки вы можете подключить свой сервис к доменному сокету Unix экземпляра Cloud SQL, доступному в файловой системе среды по следующему пути: /cloudsql/INSTANCE_CONNECTION_NAME.
Сразу после внесения изменений и развертывания я смог успешно получить доступ к бэкендам Django.