2016-02-16 2 views
0

У меня есть удаленный сервер с Nginx -> gunicorn -> django. Когда я ударяю представление, которое вызывает исключение, я ожидаю вернуть страницу 500 server error. Вместо этого он висит на ~ 10 секунд, и я получаю 502 bad gateway.Django отключается вместо возвращаемого исключения

Когда я заглядываю в журналы стрельбы, они указывают, что рабочий был приурочен и был убит. Исключения не регистрируются, и электронные письма администратора не отправляются. Бревна для стрельбы:

[2016-02-16 16:47:30 -0600] [5809] [CRITICAL] WORKER TIMEOUT (pid:5817) 
[2016-02-16 22:47:30 +0000] [5817] [INFO] Worker exiting (pid: 5817) 
[2016-02-16 16:47:30 -0600] [5833] [INFO] Booting worker with pid: 5833 

На моей локальной машине все работает так, как ожидалось. Они оба работают одинаково settings.py (DEBUG - False). Я свел его к тестовому случае

def foo(request): 
    raise Exception('bar') 

Browsing к нему локально, он немедленно возвращает страницу ошибки 500 сервера, а также стреляя администратор электронной почты. На удаленном сервере браузер вращается некоторое время, а nginx возвращает плохой ответ шлюза. Никакие электронные письма не отправляются, никакие исключения не регистрируются.

Обычные страницы возвращаются сразу с ответами, которые я ожидаю. Похоже, что это плохое поведение, только если выбрано исключение.

Что может вызывать такое поведение?

ответ

1

Я понял. Брандмауэр не разрешал исходящие SMTP-соединения. Django висел, пытаясь отправить электронное письмо.

0

Сначала я бы увеличил nginx:

proxy_connect_timeout 300s; 
proxy_read_timeout 300s; 

и gunicorn настройки:

--timeout 180 

Может быть, это помогло бы справиться с некоторыми исключениями в лог-файлы;

Смежные вопросы