2012-01-03 6 views
0

私はHerokuとAmazon S3を使っています。このアプローチはアプリケーションをフリーズしますか?

私はオーディオファイルのダウンロードダイアログを、再生するブラウザではなく、表示させようとしています。私のコントローラの一

は、私が持っている:

response.content_type = 'application/octet-stream' 
response.headers['Content-Disposition'] = "attachment; [email protected]" 
response.headers['X-Accel-Redirect'] = @audio.encoded_file_url 
render :nothing => true 

@audio.encoded_file_url戻りhttp://bucket_name.s3.amazonaws.com/uploads/19/test.mp3

私のローカルマシンで動作するようです。しかし、このアプローチがHTTPリクエストハンドラ全体をブロックし、ダウンロードが完了するまでアプリをフリーズするかどうかは疑問です。

Herokuでは、HTTPリクエストハンドラはDynoの1つです。いくつかのDynosを持つことは高価です。

+0

ダウンロード中にブロックされます.S3はアップロード中にコンテンツの処理を設定することができます。ファイルに直接リンクしてもダイアログが表示されます。 – house9

+0

私は分かりません。ファイルがすでにS3上にある場合はどうなりますか?つまり、コンテンツの廃棄設定がアップロード中に設定されていません –

答えて

0

使用されているnginxに頼ることができるとは確信していません(X-Accel-Redirectはnginx-ismです)。heroku docsは必ずしも使用されているわけではありません。

さらに、X-Accel-Redirectは私の知る限り、実際にはサーバー上のファイルにリダイレクトするだけで、外部にホストされたファイルではありません。 S3ホストされたファイルへの通常のリダイレクトをしないでください(必要に応じて認証されたURLを使用してください)。

コンテンツの配置のようにヘッダーを設定する必要がある場合は、アップロード時に行うことも、後で行うこともできます。あなたは、このようなコンテンツタイプ、キャッシュなどの他の分野を持っている場合 - あなたはS3のビジネスを行うために霧を使用する場合はこのようにそれを行うことができ、これはすべてのメタデータを上書きすること

storage.copy_object("your_bucket", "filename","your_bucket","filename", "x-amz-metadata-directive" => 'REPLACE', 'Content-Disposition' => '...') 

注意(storageと仮定するとFog::Storageオブジェクトです) - 制御など、ここでそれらを設定することを確認してください、またはそれらは失われます。

+0

S3ホストされたファイルへの通常のリダイレクトを行うと、ブラウザはダウンロードダイアログポップアップの代わりにオーディオファイルを再生します。または私は何かを逃していますか? –

+0

s3にファイルを保存すると、コンテンツ処理ヘッダーを設定することができます –

+0

S3に既に存在するファイルでこれを行うことはできますか? –

0

私はあなたのページをサーバーに使用するというダイノスを使って、アプリケーションからファイルをダウンロードさせないようにすることをお勧めします。任意のstatic assets should really be served from S3を使用して、ユーザーにファイルダウンロードを指示できます。

ユーザがダウンロードしている間、あなたのdynoは効果的にそのファイルをそれらに供給しているので、何もできません。

関連する問題