uWSGI retournant une réponse vide

9

J'ai un site Django que j'essaie de serveur via uWSGI. J'ai démarré le serveur comme ceci:

uwsgi --emperor .
Ctrl+Z
bg 1

(Il existe deux fichiers .ini qui pointent vers la version de test et la version de production du site, desservant respectivement 9001 et 9002)

J'essaie alors d'obtenir mon site:

curl http://localhost:9002

Quand je fais cela, je reçois un message disant que le vassel est loyal mais pas de réponse réelle. Le uwsgi.log contient alors les éléments suivants:

[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)

Aucune erreur n'est enregistrée.

Je dois dire que cela a bien fonctionné avant un redémarrage, donc les fichiers uwsgi.ini devraient être corrects.

Des idées où je devrais commencer à diagnostiquer cela?

d4nt
la source
Je peux signaler un problème similaire mais avec une configuration encore plus basique. Les en-têtes sont envoyés correctement, mais le corps de la réponse est simplement vide. J'expérimente cela avec Python 3.4 à la fois uWSGI et gunicorn.
Dakota
suivre le journal uwsgi et le lire très attentivement, c'est une gêne verbeuse mais j'ai finalement pu retrouver mon problème, il me manquait la plugin = python3strophe de l'ini de mon uwsgi vassal, ce qui signifiait que mon projet django python3 n'était pas réellement chargé ou fonctionner correctement,
ThorSummoner

Réponses:

8

J'ai eu un problème, il s'est avéré que mon application wsgi retournait UNICODE au lieu de BYTE STRINGS (j'étais sur python3); et rien n'apparaît dans les journaux à ce sujet ... WSGI attend des chaînes d'octets en sortie, jamais unicode.

Dans l' appelable de votre application au lieu de return "string"vous devez utiliser return b"string"oureturn "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"

Vous pouvez consulter http://uwsgi-docs.readthedocs.io/en/latest/Python.html#python-3 pour plus d'informations sur l'utilisation d' uwsgi avec python3 .

PKL
la source
1
+1 Cela m'a aidé. J'obtenais une réponse vide de la pile python3 virtualenv + uwsgi + nginx. return ["hello world"]devrait être return [b"hello world"]plus d'informations sur: uwsgi-docs.readthedocs.io/en/latest/Python.html
AmirHossein