0

DOMAIN.COM/hello.html にいるかのように見せながら、ユーザーをページ (bucket.amazons3.com/hello.html など) に単純に再ルーティングしたい ... 私はこれをやりたい特定のIF条件が通過した場合..

例えば:

if (RAILS == "cool") && (S3.exists?("hello.html"))
 send_to_s3
end

ここで、「send_to_s3」は単にユーザーを Amazon Cloudfront または S3 にリダイレクトし、ブラウザで「hello.html」ページをレンダリングします。しかし、彼らは私のウェブサイトを離れたことはないように感じます..

Hello1.html、Hello2.html、Hello3.html..... Hello20Million.html... でこれと同じ動作を実行したいとします。

サーバーの負荷を大幅に増加させることなく、これを効率的に行うにはどうすればよいですか?

Thin/Puma/Webrick のようなサーバーで実行されている RAILS でこれを行うにはどうすればよいですか?

4

1 に答える 1

2

これを行うには、次の 2 つの方法があります。

  1. ビューで S3 URL を指す iframe を使用する。
  2. amazon URL に対してサーバー側のリクエストを実行し、Rails ビューの 1 つであるかのようにレスポンスをレンダリングします。

最初のオプションは非常に簡単です。条件が満たされている場合はsrc、S3 URL を指す属性を持つ iframe が埋め込まれた Rails ビューの 1 つを開きます。ユーザーにシームレスなエクスペリエンス (ウィンドウのサイズ変更など) を提供するには、JS で iframe の寸法 (幅 x 高さ) を動的に処理する必要があります。

2 番目のオプションでは、実際に ruby​​ を使用して S3 URL を要求し、open-uri取得した応答を独自のビューにレンダリングできます。ファイル URL を要求するには、次のコードを使用します。

require 'open-uri'
url_response = open('http://example.com/file_to_read.htm').read

あなたのビューでは、以下をレンダリングする必要がありますurl_response:

<%= url_response.html_safe %>

を使用しhtml_safeて、文字列をエンコードせずにそのまま出力してHTMLセーフにすることをレールに伝えます。

これらのオプションのいずれかを使用すると、リクエストがサーバーから送信されているように見えます。

PS: また、URL の書き換えやプロキシ パスの使用などによってこれを行うことも可能だと思ってい.htaccessましたが、質問では「Rails」について具体的に尋ねました。

于 2013-01-08T02:44:21.227 に答える