我有一个基本的应用程序,用户可以上传一堆HTML文件(index.html,mypage.html)和一堆资产(myimage.jpg,myscript.js),并在他们自己的网址上访问这些文件,如www .mysite.com /用户名/ 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
但是,这非常慢,因为:
我想要的是以下
我认为这会很棒,但我坚持使用文件版本。为了利用缓存,我想设置长TTL并利用文件验证。但是,我不想浏览所有用户上传的HTML并将所有资产标签从/myimage.jpg替换为/myimage-VERSION.jpg,我不想要像www.mysite.com/这样长的疯狂网址用户名/索引VERSION.html
我想知道是否有聪明的方法来做到这一点?基本上从Cloudfront获取HTML,从我的Rails应用程序注入HTML,并利用版本化文件,同时保持良好的URL和原始HTML文件不受影响。
或者我应该在控制器端使用memcached?
有什么想法吗?
答案 0 :(得分:1)
您可以设置CloudFront以将您的Rails应用程序用作custom origin。首先向CloudFront发送请求。当新的未缓存请求进入CloudFront时,您的应用将首先被命中以填充CloudFront的缓存。这是您在将完成的页面交付给CloudFront进行缓存之前执行所有自定义处理的时间。设置适当的缓存ETag或类似内容,CloudFront将请求您提供304或新内容的更新。