0

表や棒グラフなど、さまざまな形式でデータを表示する Django アプリを開発しています。matplotlib を使用して棒グラフを png として作成します。次に、次のコードを使用してそれを返します。

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

組み込みの Django 開発サーバーを使用すると、すべて正常に動作します。ただし、使用する場合:

python manage.py run_gunicorn 

棒グラフ以外はすべて機能します。棒グラフの代わりに URL が表示されます。png 画像を表示するには、nginx を実行する必要がありますか?

編集

カールからの出力:

 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
4

1 に答える 1

2

ああ!これは、最近 Gunicorn で修正したバグに関連しています [1]。HttpResponse.write() を使用する場合、Django は Content-Length を設定しないようです。これを手動で設定するか、明らかに django.middleware.http.ConditionalGetMiddleware をミドルウェア リストに追加するだけで、Django に Content-Length が追加されます。

元のバグはすぐに修正されるので、数日中に Gunicorn の新しいバージョンをリリースする予定です。

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

于 2011-05-17T21:11:26.447 に答える