ユーザーが一連の HTML ファイル (index.html、mypage.html) と一連のアセット (myimage.jpg、myscript.js) をアップロードし、www.mysite のような独自の URL でこれらにアクセスできる基本的なアプリがあります。 com/username/index.html。
ただし、私のサイトでは、アップロードされた HTML にさまざまなものを追加しています。コメントやブックマークなどを追加する機能です。これらはすべて JS を介して挿入されます。
Rails アプリでは、現在、ユーザーが S3 からアップロードしたコンテンツをコントローラーにロードし、一連の JS と共にビューに出力しています。
def show
# load HTML from S3
# strip out everything between body tags and put in @body var
# render view that outputs @body on a page with a bunch of JS
end
ただし、これは次の理由で非常に遅いです。
- ユーザーがアップロードしたファイルの CDN キャッシュを利用していない
- クライアントに HTTP 呼び出しを入れていません。クライアントは、コンテンツを表示する前に、サーバーが S3 からコンテンツをロードするのを待っています。
私がリクエストしたいことは次のとおりです
- Rails アプリは、JS を含む生の HTMl ページを返します。
- JS は Cloudfront から HTML ファイルを読み込みます (キャッシュを利用します)。
- JS は、コメント、ブックマークなどとともに HTML をページに挿入します。
これは素晴らしいことだと思いますが、ファイルのバージョン管理に行き詰まっています。キャッシュを活用するために、長い TTL を設定し、ファイルの検証を利用したいと考えています。ただし、ユーザーがアップロードしたすべての HTML を実行して、すべてのアセット タグを /myimage.jpg から /myimage-VERSION.jpg に置き換えたくはありません。また、www.mysite.com/ のような長いクレイジーな URL も必要ありません。ユーザー名/インデックス-VERSION.html
これを行う賢い方法があるかどうか疑問に思っていますか?基本的に、Cloudfront から HTML をフェッチし、Rails アプリから HTML を挿入し、Nice URL と元の HTML ファイルを変更せずにバージョン管理されたファイルを利用します。
それとも、コントローラー側で memcached を使用する必要がありますか?
何か案は?