Попытка запустить приложение Django в App Engine flex, получение сервера 502 при доступе к обработчику

# #python-3.x #django #google-cloud-platform #django-rest-framework

Вопрос:

Я создаю простую страницу входа в систему. Вы можете войти в систему с помощью учетной записи Django или с помощью входа в Google. Я пытаюсь убедиться, что вы можете сначала войти в систему с помощью учетной записи 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
 

Комментарии:

1. Пожалуйста, включите журналы приложения в свой вопрос: gcloud app logs это один из способов получить их.

2. 502 s результат по многим причинам, включая неправильную конфигурацию (ваш app.yaml внешний вид в порядке). Правильно ли ваше приложение работает локально? Ваш вопрос предполагает, что /admin обработчик изначально отвечает, и ошибка возникает только тогда, когда вы отправляете запрос, верно?

3. Похоже, что так, да. Я могу получить доступ /admin и просмотреть страницу с формой для отправки, но когда я нажимаю кнопку входа в систему, я получаю ошибку 520

4. Вот в чем ошибка POST /admin/login/?next=/admin/" 502

5. Я … не вижу проблемы?

Ответ №1:

Я не знаю, почему. Но мне пришлось изменить детали в моем settings.py

Я спросил кого-то из своих знакомых, кто ранее выполнял развертывание в Google Cloud, для справки. После проверки разницы главное заключалось в том, как HOST была настроена база данных.

Вот что я сделал.

 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 вашего экземпляра облачного SQL, доступ к которому осуществляется в файловой системе среды, по следующему пути: /cloudsql/INSTANCE_CONNECTION_NAME.

В тот момент, когда я внес изменения и развернул, я смог успешно получить доступ к своим бэкэндам Django.

Ответ №2:

Эта ошибка обычно означает, что сервер не смог выполнить прокси-запрос. Существует множество возможных проблем, связанных с этим, поэтому хорошей отправной точкой было бы выполнить эту команду, чтобы открыть журнал ошибок и устранить неполадки.

хвост sudo-F /var/log/nginx/error.log