Ich verwende eine Django-Anwendung auf verdreht mit den django-on-twisted Skripte von this site.Twisted Server stürzt unerwartet während der Ausführung von django ab
Alle Anforderungen werden von einem Nginx-Server bedient, der die relevanten Anforderungen an die umgekehrte Proxys verdreht. Ich habe ein URL-Setup für eine API, die im Grunde nur erhalten Anfragen und macht einige Verarbeitung auf die Get-Parameter vor dem Senden einer Antwort. Wenn jedoch ein bestimmter Client die API trifft, wird der verdrehte Server einfach heruntergefahren. Unten ist das Nginx Protokoll:
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"
Die verdrehten Protokolle zeigen nichts anderes als verdreht stoppt an dieser Stelle funktioniert. Mit dem Fehlercode 499 gehe ich davon aus, dass der Client die Verbindung unerwartet geschlossen hat, womit ich kein Problem habe. Ob der Kunde die Antwort erhält oder nicht, ist mir nicht wichtig. Hier ist die relevante django Ansicht:
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
Die Anforderung von dem Client eine gültige Anforderung und nicht die Verarbeitung in einer negativen Art und Weise beeinflussen. Ich habe es aus der Schale getestet. Als ich es auf dem django-Entwicklungsserver ausprobierte, stürzte es auf die gleiche Weise ab, ohne irgendwelche Spuren des Empfangs der Anfrage zu hinterlassen. Alles funktioniert perfekt, wenn man es vom Browser aus testet. Außerdem funktioniert der Twisted-Server für alle regulären Anwendungsfälle. Dies ist das erste Mal, dass ich damit ein Problem habe. Jede Hilfe oder Hinweise werden geschätzt.
Was "heruntergefahren" bedeutet das? Verlässt es sauber? Führt ein Signal dazu, dass es austritt? –
Der verdrehte Server schreibt nichts in die Protokolle. Ich bin mir ziemlich sicher, dass es kein sauberer Ausgang ist. Es hört einfach auf zu arbeiten. Irgendeine Idee, wie ich vielleicht das Ausstiegssignal bekommen könnte? – tapan
Wenn Sie bash verwenden, hilft '$?'. Von der Bash-Man-Seite: **? Expandiert in den Exit-Status der zuletzt ausgeführten Vordergrund-Pipeline. ** So zum Beispiel "twistd ...; echo $? ' –