如何分隔出现在同一URL的动态和静态内容

时间:2013-09-16 14:25:03

标签: ruby-on-rails rest architecture express cors

我正在部署一个由静态(营销)网站和动态应用组成的Web应用。

我的目标是:

  1. 分离动态和静态内容。更新静态站点不应该重新部署代码;更新应用程序不应触及静态站点。
  2. 看起来它们都存在于同一个网址上,例如www.mysite.com
  3. 考虑Twitter的工作原理:http://twitter.com/privacy转到由法律/营销控制的静态页面,而http://twitter.com/转到您的Feed。

    我看到一些选项,可以使用一些帮助:

    1. 设备:基于NetScaler / F5等网址的路由。方式太昂贵,并且在云部署(Heroku / Jitsu / AWS / etc)中表现不佳
    2. 代理:部署到不同网址的静态网站(例如web.mysite.com),动态网站知道特殊路径并检索和缓存数据。它有效,但复杂而且凌乱。
    3. CORS :所有静态服务都来自静态网站www.mysite.com,但是从备用api.mydata.com加载应用程序模板,JS,CSS等,并使用CORS通过REST加载动态数据
    4. 3听起来不错,但担心CORS浏览器的支持,并且仍会在静态和动态网站上造成一些污染。

      FWIW,在nodejs中实现动态,但可以很容易地应用于RoR甚至JavaEE。

1 个答案:

答案 0 :(得分:1)

如果您不介意将静态内容放在特定的子目录(如twitter / privacy)中,那么我认为您需要做的就是将该目录添加到.gitignore(或其他VCS忽略文件)中,然后部署没有该子目录的应用程序。您需要一些其他流程才能将更改上传到静态内容。

至于服务它,您应该有一个前端网络服务器(可能是apache或ningx)或其他服务所有静态内容的代理服务器,包括来自应用程序动态部分的图像和js / css。如果您的静态网站无论如何都是.html等,那么它应该以相同的方式提供服务,而不会触及您正在运行的应用程序。您还可以在Web或代理服务器配置中更明确地表示它应该为该子目录中的所有内容提供服务,而不会将请求转发给您的应用程序。