2012-04-21 5 views
38

Я запускаю приложение django на скрученном с использованием скриптов django-on-twisted от this site.Скрученный сервер неожиданно падает при запуске django

Все запросы обслуживаются сервером nginx, который обращается с соответствующими запросами на скрученные запросы. У меня есть установка url для API, которая в основном просто получает запросы на получение и выполняет некоторую обработку параметров get перед отправкой ответа. Однако, когда конкретный клиент нажимает api, скрученный сервер просто выключается. Pasted ниже журнал 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, я предполагаю, что клиент неожиданно закрыл соединение, с которым у меня нет проблем. Получает ли клиент ответ или нет, для меня это не важно. Вот соответствующий вид Джанго:

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

Что "выключается" означает? Выходит ли оно чисто? Вызывает ли сигнал его выход? –

+0

Закрученный сервер ничего не записывает в журналы. Я уверен, что это не чистый выход. Он просто перестает работать. Любая идея о том, как я могу поймать сигнал выхода? – tapan

+6

Если вы используете bash, то '$?' Поможет. Из справочной страницы bash: **? Расширяется до статуса выхода последнего выполненного переднего плана. ** Так, например, 'twistd ...; echo $? ' –

ответ

1

В rfc нет кода 499 http. Nginx определяет сам код 499.

Когда клиент отправил запрос и закрыл соединение, не дожидаясь ответа , возникает код 499. Если в вашем access_log много 499, это в основном вызвано медленными back-end (слишком медленно для ваших пользователей ). Возможно, вам придется оптимизировать работу вашего сайта.

http://forum.nginx.org/read.php?2,213789,213794#msg-213794

+0

Бэкэнд на самом деле хорош. 499 вызван ботом, который сбрасывает данные на бэкэнд через переменные get. Он отправляет запрос и немедленно закрывает соединение, не дожидаясь ответа. Это приемлемое поведение. Из-за этого я просто не хочу извращаться. Сейчас я использую gunicorn, и он отлично работает для одного и того же варианта использования. – tapan

1
  • вы говорите, что проблема от клиента ударяя конкретный URL (воспроизводимое?)
  • , так как он работает для вас с gunicorn но не Джанго-на-скрученный, либо сценарий не правильная работа или twisted.web2.

, пожалуйста, попробуйте $ sh init.sh yourdjangoproject stand.

вы можете также попытаться изменить run.py поймать SystemExit:

import pdb 
try: 
    # __main__ stuff here. 
except (KeyboardInterrupt, SystemExit): 
    pdb.set_trace() 
+0

Спасибо за ответ! Я действительно не в состоянии проверить это, так как мы перешли к совершенно новой архитектуре. Но я попытаюсь настроить среду для этого конкретного случая позже и посмотреть, помогает ли ваш ответ. – tapan

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