2016-04-15 11 views
0

Ruby on Rails 4.2を使用してリモートストレージサービス(s3 :-)ではなく)からクライアントにファイルをストリーミングしようとしています。ruby​​/rails 4/unicorn/nginxのクライアントへのリモートファイルのストリーム

私のサーバーは、クライアント要求を認証するために、クライアントの要求を認証するために、リモートのストレージサービスへの要求を構築する必要があります。そのサービスへのすべての要求は、カスタムヘッダーパラメータを使用して認証される必要があります。これにより、単純なredirect_toを実行することができなくなり、クライアントがファイルを直接ダウンロードできるようになります(ただし、実際にはレールを使って可能かどうかを教えてください)。また、私はクライアントのために隠されたファイルのURLを保持したい。

今まで私はZipLineという名前の宝石を使っていましたが、クライアントに送信する前にリモートファイルをまだバッファリングしているので、これも機能しません。私はunicorn/nginxを使用しているので、これはどちらかの設定が適切なストリーミングを妨げている可能性もあります。私は設定/ unicorn.rbになく、無駄に

listen 3000, tcp_nopush: false 

を追加しようとしているレールあたりのドキュメントの指示として

解決策は、リモートファイルを一定期間ローカルにキャッシュし、そのファイルを提供することです。私はどのように実現するか)

1:これは

ので、合計するいくつかのものを簡単にするだけでなく、など、キャッシュの有効期限のトリガー権を設定、同期、リモートおよびキャッシュされたファイルを維持するような新しい頭痛を作成します上記のシナリオ?

2)これがインテリジェントで効率的な方法でない場合は、リモートコピーをキャッシュするだけですか?

3)特定のシナリオでのあなたの経験/推奨事項は何ですか?

私は、さまざまなソリューションがウェブ全体に散在していますが、完全な解決策を呼び起こすものはありません。

ありがとうございます!

+0

こんにちはCorstiaan、おそらく今までに解決策が見つかりました。私は同じ問題を抱えています。ここに私のスレッドです:https://stackoverflow.com/questions/45714918/download-as-attachment-not-streamingしかし、それは本当に飛行機で私のために働くziplineに関して。私はPaperclipとS3 – Maxence

答えて

1

サードパーティのストレージサービスにHTTPアクセスがあるとします。 redirect_toの使用を検討した場合は、サービスがダウンロードごとの許可を許可する手段を提供しているものとします。期限切れのヘッダー内の一意のキーのように、秘密のapiキーや、有効期限のあるHMAC署名付きURLをパラメータとして公開しません。

とにかく、ほとんどのクラウドストレージサービスは、この種のファイルアクセスを提供します。サービスをストリームにすることを強くお勧めします。あなたのアプリは単にユーザーを認証し、サービスにリダイレクトするだけです。 Railsでは、リダイレクト中にカスタムヘッダを追加することができます。それはRails guidesで議論されています。あなたは、応答のためのカスタムヘッダーを設定したい場合は、カスタムヘッダ

を設定

10.2.1は、 がそれを行うための場所ですresponse.headers。ヘッダー属性は、 ヘッダー名をその値にマップするハッシュで、Railsは自動的に の一部を設定します。

def download 
    # do_auth_check 

    response.headers["Your-API-Auth-Key"] = "SOME-RANDOM-STRING" 
    redirect_to url 
end 

により、不要なサーバーリソースを使用しないでください:あなたは、ヘッダーを追加または変更したい場合は、単にだからあなたのアクションコードは次のようなものになってしまうでしょうresponse.headers

に を割り当てますそのすべてのダウンロードをストリーミングします。結局のところ、クラウドサービスを提供しています:)

+0

ありがとう@Uzbekjonで働いていますが、クライアントに認証鍵を潜在的に公開していませんか? – Corstiaan

+0

ファイルの要求はPOSTを使用して行う必要があります。これはredirect_toを排除するでしょうか? – Corstiaan

+0

再認証キー。これは、ストレージサービスの認証方法に応じて異なります。たとえば、s3では、秘密鍵データを一切含まない一意のハッシュを使用したダウンロードが可能です。したがって、あなたはあなたのストレージドキュメントを見るべきです。 POSTをしなければならない場合は、 'redirect_to'を除外します。 – Uzbekjon

関連する問題