uWSGI Leere Antwort zurückgeben

8

Ich habe eine Django-Site, die ich über uWSGI bedienen möchte. Ich habe den Server so gestartet:

uwsgi --emperor .
Ctrl+Z
bg 1

(Es gibt zwei INI-Dateien, die auf die Testversion und die Produktionsversion der Site verweisen und auf 9001 bzw. 9002 bereitgestellt werden.)

Ich versuche dann, meine Seite zu bekommen:

curl http://localhost:9002

Wenn ich das mache, bekomme ich eine Nachricht, dass der Vasel loyal ist, aber keine tatsächliche Antwort. Das uwsgi.log enthält dann Folgendes:

[pid: 5071|app: 0|req: 2/2] 127.0.0.1 () {26 vars in 357 bytes} [Tue Jul 23 13:20:21 2013] GET / => generated 0 bytes in 1 msecs (HTTP/1.1 302) 2 headers in 96 bytes (1 switches on core 1)

Es werden keine Fehler protokolliert.

Ich sollte sagen, dies hat vor einem Neustart gut funktioniert, daher sollten die Dateien uwsgi.ini in Ordnung sein.

Irgendwelche Ideen, wo ich anfangen sollte, dies zu diagnostizieren?

d4nt
quelle
Ich kann ein ähnliches Problem melden, jedoch mit einer noch grundlegenderen Konfiguration. Header werden ordnungsgemäß gesendet, aber der Antworttext ist einfach leer. Ich erlebe dies mit Python 3.4 sowohl uWSGI als auch gunicorn.
Dakota
Verfolgen Sie das Uwsgi-Protokoll und lesen Sie es sehr sorgfältig durch. Es ist ein ausführlicher Ärger, aber ich konnte mein Problem schließlich aufspüren. Mir fehlte die plugin = python3Strophe in der Ini meines Uwsgi-Vasallen, was wiederum bedeutete, dass mein Python3-Django-Projekt nicht wirklich geladen wurde oder richtig laufen,
ThorSummoner

Antworten:

8

Ich hatte ein Problem, es stellte sich heraus, dass meine wsgi-Anwendung UNICODE anstelle von BYTE STRINGS zurückgab (ich war auf Python3); und nichts wurde in Protokollen darüber angezeigt ... WSGI erwartet Byte-Strings in der Ausgabe, niemals Unicode.

Im aufrufbaren Ihrer Anwendung return "string"sollten Sie stattdessen return b"string"oder verwendenreturn "string".encode("utf-8")

def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    # One of the below can be used.
    return "string".encode("utf-8")
    return b"string"

Sie können prüfen , http://uwsgi-docs.readthedocs.io/en/latest/Python.html#python-3 für mehr informaiton heraus mit uwsgi mit python3 .

PKL
quelle
1
+1 Das hat mir geholfen. Ich habe eine leere Antwort von python3 virtualenv + uwsgi + nginx stack erhalten. return ["hello world"]sollte sein return [b"hello world"]: auf weitere Informationen uwsgi-docs.readthedocs.io/en/latest/Python.html
Amirhossein