Django用のajaxファイルアップローダーを作成しましたが、アップロードされた各ファイルは大きなメモリ(30〜80 mb)を消費し、それを手放さないようです。
dynoごとに512MBのメモリを割り当てるHerokuを使用しているため、すぐにメモリ超過エラーが発生し始めます。
リクエストを処理するためのDjangoビューコードは次のとおりです。
if request.is_ajax():
# the file is stored raw in the request
upload = request
is_raw = True
try:
filename = request.GET[ 'add_image' ]
except KeyError:
return HttpResponseBadRequest( "AJAX request not valid" )
(fileBaseName, fileExtension)=os.path.splitext(filename)
uniquename = biz_id + "__" + get_a_uuid() + fileExtension
saved = save_upload(upload, uniquename, biz)
そして、ここにsave_uploadコードがあります:
try:
#BusinessImage is my Django model. It uses django-imagekit to processs
#the raw uploaded image into three sizes (plus the original)
bi = BusinessImage(name=uploaded.GET.get("name"), business=biz)
if not BusinessImage.objects.filter(business=biz).exists():
bi.primary_image = True
bi.original_image.save(filename,ContentFile(uploaded.read()))
except IOError:
# could not open the file most likely
return False
finally:
uploaded.close()
return True
このコードは、この投稿を基にしています(AlexKuhlとThunderRabbitに感謝します)。
メモリの問題はdjango-imagekitに関係しているのではないか、ファイルを適切に閉じていないのではないかと思いますが、よくわかりません。助けていただければ幸いです。
ありがとう!
粘土