私は現在、s3でビデオをあるバケットから別のバケットにコピー/移動しようとするRailsアプリケーションを開発しています。しかし、Railsアプリケーションでプロキシエラー502が発生し続けます。雑種のログには、「メモリの割り当てに失敗しました」と表示されます。このエラーが発生すると、アプリケーションが停止し、再起動する必要があります。
4382 次
4 に答える
7
コードがリソース全体をメモリに読み込んでいるようで、アプリケーションのメモリが不足しています。これを行う単純な方法 (そして、あなたの説明から、既にこのようなことを行っています) は、ファイルをダウンロードして再度アップロードすることです: メモリではなく、ローカル ファイルにダウンロードするだけです。ただし、Amazon のエンジニアは先を見越して、この特定のケースにも対処できる API を提供しています。
RightAWS gem のようなものを使用している場合は、その S3Interface を次のように使用できます。
# With s3 being an S3 object acquired via S3Interface.new
# Copies key1 from bucket b1 to key1_copy in bucket b2:
s3.copy('b1', 'key1', 'b2', 'key1_copy')
また、ネイキッド S3 HTTP インターフェイスを使用している場合は、HTTP のみを使用して 1 つのオブジェクトをあるバケットから別のバケットにコピーするソリューションについて、Amazon のオブジェクト コピー ドキュメントを参照してください。
于 2009-04-20T20:35:00.967 に答える
0
ファイル全体をメモリにロードしてから操作するのではなく、ファイルをストリーミングしてみてください。
たとえば、aws-s3 gem を使用している場合は、次を使用しないでください。
data = open(file)
S3Object.store file_name, data, BUCKET
代わりに以下を使用してください。
S3Object.store file_name, open(file), BUCKET
ただし、ファイルを「ストリームダウンロード」する方法が正確にはわかりません。
于 2009-04-20T20:36:49.743 に答える