レポートをPDFでエクスポートするWebアプリがあります。クエリが100未満の値を返す場合は、すべて問題ありません。レコード数が100を超えると、サーバーは502プロキシエラーを発生させます。レポートはHTMLで正常に出力されます。サーバーをハングアップさせるプロセスは、htmlからPDFへの変換です。私はPDFを生成するためにxhtml2pdf(別名pisa 3.0)を使用しています。アルゴリズムは次のようなものです。
def view1(request, **someargs):
queryset = someModel.objects.get(someargs)
if request.GET['pdf']:
return pdfWrapper('template.html',queryset,'filename')
else:
return render_to_response('template.html',queryset)
def pdfWrapper(template_src, context_dict, filename):
################################################
#
# The code comented below is an older version
# I updated the code according the comment recived
# The function still works for short HTML documents
# and produce the 502 for larger onese
#
################################################
##import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
##from cgi import escape
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
response = HttpResponse()
response['Content-Type'] ='application/pdf'
response['Content-Disposition']='attachment; filename=%s.pdf'%(filename)
pisa.CreatePDF(
src=html,
dest=response,
show_error_as_pdf=True)
return response
##result = StringIO.StringIO()
##pdf = pisa.pisaDocument(
## StringIO.StringIO(html.encode("ISO-8859-1")),
## result)
##if not pdf.err:
## response = HttpResponse(
## result.getvalue(),
## mimetype='application/pdf')
## response['Content-Disposition']='attachement; filename=%s.pdf'%(filename)
## return response
##return HttpResponse('Hubo un error<pre>%s</pre>' % escape(html))
サーバーがメモリを解放できるようにバッファを作成することを考えましたが、まだ何も見つかりませんでした。誰でも助けることができますか?お願いします?