我想简单地将用户重新路由到一个页面(比如bucket.amazons3.com/hello.html),同时仍然让它看起来像是在DOMAIN.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中执行此操作?
答案 0 :(得分:2)
有两种方法可以做到这一点:
第一个选项很简单。如果满足您的条件,则打开一个rails视图,其中包含一个嵌入式iframe,其src
属性指向S3 URL。您必须在JS中动态处理iframe尺寸(宽度x高度),以便为用户提供无缝体验(窗口调整大小等)。
在第二个选项中,您实际上可以使用open-uri
通过ruby请求S3 URL,然后将您获得的响应呈现在您自己的视图中。要请求文件URL,请使用以下代码:
require 'open-uri'
url_response = open('http://example.com/file_to_read.htm').read
在您的视图中,您需要呈现url_response
:
<%= url_response.html_safe %>
使用html_safe
告诉rails您要按原样输出字符串而不进行任何编码,以使其安全。
使用其中任何一个选项都会使显示,就像请求来自您的服务器一样。
P.S:我也想知道也可以通过使用.htaccess
或类似的URL重写或代理传递来执行此操作,但在您的问题中,您已经专门询问了“Rails”。