2014-10-30 7 views
10

Ich habe ein Django-Projekt hinter Nginx und Gunicorn laufen. Eine der Anwendungen interagiert mit Netzwerkgeräten mithilfe von Exscript, das wiederum Paramiko verwendet. Einige Geräte funktionieren nicht richtig, wenn sie hinter Gunicorn stehen.Könnte Gunicorn ein Problem mit exscript/paramiko verursachen?

Derselbe genaue Code funktioniert in der django-admin-Shell einwandfrei. Es wird auch funktionieren, wenn ich den integrierten Django-Server starten, aber ich bekomme immer noch den Fehler, wenn ich Nginx umgehen und direkt mit Gunicorn verbinden.

Ich versuchte, die Funktionalität zu einer Sellerie Aufgabe zu bewegen, hatte es das gleiche genaue Problem, aber nur hinter Gunicorn.

Ich schrieb ein Skript mit Django-Erweiterungen, die von der Befehlszeile aus funktioniert, aber wird fehlschlagen, wenn über Subprozess aufgerufen wird. Aber nur hinter Gunicorn.

Die Geräte, die alle ausfallen, scheinen F5-LTMs zu sein, und es sieht so aus, als ob der Puffer im exscript-Objekt irgendwie geändert wird. Wenn ich raten müsste, würde ich sagen, dass Gunicorn und Exscript/Paramiko irgendwie auf die Erinnerung jedes anderen treten, oder vielleicht setzt Gunicorn eine Umgebungsvariable, die Exskript aufnimmt.

In jedem Fall bin ich gründlich ratlos und würde jede Anleitung, wie man dies beheben kann, schätzen.

+0

Wie haben Sie Paramiko installiert? Mit einem Betriebssystempaket? Mit Pip? Verwenden Sie virtualenv? Sind Sie sicher, dass Gunicorn dasselbe Paramiko verwendet wie Ihre Befehlszeile? –

+0

Parimiko wurde mit Pip installiert, und nur in der Virtualenv, die Gunicorn verwendet. Gute Idee aber. –

+2

Wenn Sie das Problem immer noch haben, geben Sie bitte an, welcher [Läufertyp] (http://gunicorn-docs.readthedocs.org/en/latest/run.html#commonly-used-arguments) Sie in Gunicorn verwenden? Wenn Sie sagen, dass es scheitert, können Sie näher erläutern, was genau passiert (eine Ausnahme, Prozess hängt, etc.)? – tutuDajuju

Antwort

1

Insgesamt raten, aber vielleicht wird dies beim Debuggen hilfreich sein. Stellen Sie im Grunde sicher, dass Sie die gesamte Pufferung der Ausgabe entfernt haben, was oft verbergen kann, was wirklich passiert, wenn Sie mehrere große Frameworks überlagern (wie Sie es hier tun). Stellen Sie sicher, dass Sie die gesamte Pufferung der Ausgabe in Python sowohl für den Webserver im Vordergrund als auch für alle Worker-Prozesse deaktivieren (PYTHONUNBUFFERED ist eine einfache Möglichkeit, sicherzustellen, dass keines Ihrer Python-Skripts gepuffert wird, zumindest in den Standardbibliotheksfunktionen)).

Das Terminal kann auch Puffer implementieren, die das Debugging außergewöhnlich schwierig machen. Ziehen Sie in Betracht, zwischen your command und stdbuf -o0 -e0 your command zu wechseln, um Puffer auf stdout und stderr zu deaktivieren (your command könnte sie immer noch aktivieren, aber die meisten Programme nicht).

+0

Upvoted, weil es etwas ist, das ich damals nicht in Betracht gezogen habe, aber wir haben das Problem mit der f5-Bibliothek gelöst. –

Verwandte Themen