4

私は現在、s3でビデオをあるバケットから別のバケットにコピー/移動しようとするRailsアプリケーションを開発しています。しかし、Railsアプリケーションでプロキシエラー502が発生し続けます。雑種のログには、「メモリの割り当てに失敗しました」と表示されます。このエラーが発生すると、アプリケーションが停止し、再起動する必要があります。

4

4 に答える 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 に答える
0

botoはうまく機能します。このスレッドを参照してください。boto を使用すると、オブジェクトをローカル マシンにダウンロードしてから別のバケットにアップロードするのではなく、オブジェクトをあるバケットから別のバケットに直接コピーできます。

于 2012-07-28T04:23:51.987 に答える