2011-05-16 17 views
0

Je développe une application Django qui affiche des données sous diverses formes, y compris des tableaux et des graphiques à barres. Il utilise matplotlib pour créer le graphique à barres en tant que png. Il retourne ensuite à l'aide de ce code:Gunicorn non desservi png

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

Tout fonctionne bien quand je l'utilise construit dans le serveur de développement de Django. Cependant, quand j'utilise:

python manage.py run_gunicorn 

tout fonctionne à l'exception des diagrammes à barres. Au lieu d'un graphique à barres, je vois l'URL. Dois-je exécuter nginx pour obtenir gunicorn pour afficher des images png ou y a-t-il autre chose qui me manque?

EDIT

sortie de boucle:

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 
+0

Lorsque vous exécutez avec gunicorn, ce qui se passe lorsque vous utilisez curl pour télécharger un fichier PNG? Si vous pouviez coller la sortie de quelque chose comme 'curl -v http://host.name/path/to/png> my.png', cela serait utile. –

+0

Sortie ajoutée. Merci. – ErnieP

Répondre

2

Ah! Ceci est lié à un bug que nous avons récemment résolu dans Gunicorn [1]. Apparemment, Django ne définira pas Content-Length lors de l'utilisation de HttpResponse.write(). Vous pouvez soit régler ceci à la main, soit ajouter simplement django.middleware.http.ConditionalGetMiddleware à votre liste de middleware fera ajouter Django Content-Length.

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

+0

Benoît vient de pousser la version 0.12.2 vers PyPI qui inclut la validation listée ci-dessus. http://pypi.python.org/pypi/gunicorn/0.12.2 –

Questions connexes