Question

Je développe une application Django qui affiche des données sous diverses formes, y compris les tables et les graphiques à barres. Il utilise Matplotlib pour créer le graphique à barres comme PNG. Il le renvoie ensuite en utilisant ce code:

.
.
.
canvas=FigureCanvas(fig)
response=HttpResponse(mimetype='image/png')
canvas.print_png(response)
return response

Tout fonctionne bien lorsque j'utilise le serveur de développement Django intégré. Cependant, lorsque j'utilise:

python manage.py run_gunicorn 

Tout fonctionne sauf les graphiques à barres. Au lieu d'un graphique à barres, je vois l'URL. Dois-je exécuter Nginx pour que Gunicorn affiche des images PNG ou y a-t-il autre chose qui me manque?

ÉDITER

Sortie de Curl:

 About to connect() to 127.0.0.1 port 8000 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> GET /myapps/bar_chart1 HTTP/1.1
> User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: 127.0.0.1:8000
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: gunicorn/0.12.1
< Date: Mon, 16 May 2011 14:05:00 GMT
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: image/png
< 
* Leftovers after chunking.  Rewinding 16379 bytes
* Closing connection #0
Était-ce utile?

La solution

Ah! Ceci est lié à un bug que nous avons corrigé dans Gunicorn récemment [1]. Apparemment, Django ne définira pas un contenu-longueur lors de l'utilisation de httpResponse.write (). Vous pouvez soit définir cela à la main, soit il suffit de simplement ajouter django.middleware.http.conditionalGetMiddleware à votre liste de middleware provoquera des ajout de Django.

Nous publierons une nouvelle version de Gunicorn dans les prochains jours afin que le bug d'origine soit corrigé sous peu.

[1] https://github.com/benoitc/gunicorn/commit/d83c63429eba755f5971217917e57feee85034be

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top