Аварийный сбой сервера неожиданно во время запуска django
Я запускаю приложение django на скручивание, используя скрипты django-on-twisted от этого сайта.
Все запросы обслуживаются сервером nginx, который обращает прокси соответствующие запросы на скрученные. У меня есть установка url для API, которая в основном просто получает запросы на получение и выполняет некоторую обработку параметров get перед отправкой ответа. Однако, когда конкретный клиент нажимает api, скрученный сервер просто выключается. Вставка ниже - журнал Nginx:
the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24"
Скрученные журналы не показывают ничего, кроме скрученных остановок, работающих в этой точке. По коду ошибки 499, я предполагаю, что клиент неожиданно закрыл соединение, с которым у меня нет проблем. Получает ли клиент ответ или нет, для меня это не важно. Вот соответствующий вид django:
def api_url(request):
if request.GET:
get_param = request.GET.get('get', [''])[0]
more_param = request.GET.get('more', [''])[0]
#some processing here based on the get params
return HttpResponse('OK')
else:
raise Http404
Запрос от клиента является действительным запросом и не влияет на обработку неблагоприятным образом. Я тестировал его из оболочки. Когда я попробовал это на сервере разработки django, он разбился так же, не оставив следов получения запроса. Все работает отлично, проверяя его в браузере. Кроме того, скрученный сервер хорошо работает для всех обычных случаев использования. Это первый раз, когда я столкнулся с проблемой. Любая помощь или указатели будут оценены.
Ответы
Ответ 1
В rfc нет кода 499 http. Nginx определяет сам код 499.
Когда клиент отправил запрос и закрыл соединение, не дожидаясь
ответ, код 499. Если в вашем
access_log, в основном это связано с медленными back-end (слишком медленными для вашего
пользователям ждать). Возможно, вам придется оптимизировать работу вашего сайта.
http://forum.nginx.org/read.php?2,213789,213794#msg-213794
Ответ 2
- Вы говорите, что проблема заключается в том, что клиент нажимает на определенный URL (воспроизводимый?)
- поскольку он работает для вас с помощью пушки, но не с django-on-twisted, либо script работает неправильно, либо проблема
twisted.web2
.
попробуйте $ sh init.sh yourdjangoproject stand
.
вы также можете попробовать изменить run.py
, чтобы поймать SystemExit
:
import pdb
try:
# __main__ stuff here.
except (KeyboardInterrupt, SystemExit):
pdb.set_trace()