【问题标题】:Deploying web app: updating assets on cdn and references to assets on server部署 Web 应用程序:更新 cdn 上的资产和对服务器上资产的引用
【发布时间】:2014-01-17 00:07:30
【问题描述】:

我将我的 Web 应用程序服务器代码部署到云平台。 在部署工具的过程中获取所有文件(来自本地文件系统或 git repo),将其上传到云并重新启动应用程序。

每次我的前端应用程序资产(图像、css、js)发生变化时,我都需要重新部署整个应用程序(并重新启动它)。没有内置的文件 API 只能为应用程序上传一些文件。

我的前端应用程序的构建过程准备了所有资产:图像、css、js 和包含对资产的引用的 index.html 文件。每个构建资产都有不同的 md5 名称(如果更改)以确保缓存。

前端构建完成后,它会部署整个应用程序。用户请求特定地址,服务器响应新应用的 index.html。

当只更改前端应用程序时,我想要避免部署服务器应用程序。

我可以将新文件上传到 CDN,但客户端首先会连接到服务器,它需要知道它应该加载哪些资产(实际上它需要正确的 index.html 作为响应)。

问题在于更新服务器上的 Web 应用程序前端资产和引用,而不涉及正在运行的服务器应用程序的其他部分。

如何解决这个问题?

我的想法:

  1. 服务器有 index.html 模板
  2. 前端应用构建过程上传新文件到CDN
  3. 构建过程会更新数据库中的某些实体以反映资产的变化
  4. 每次客户端请求 应用程序的服务器,它使用模板构建正确的 index.html 和数据库数据。

    不使用数据库的替代选项,每次客户端请求服务器时,服务器首先请求一些具有正确 index.html 的 CDN(或共享位置),然后响应客户端。

哪种方法更正确,该问题的最佳做法是什么?

【问题讨论】:

  • 问题是您的 index.html 链接到 cdn 上的一些“app.js”,但每次资产构建后您的 js 文件的名称可能会更改?例如。 “app_1.js”在第一次构建,“app_2.js”在第二次等等(可能是一个非常简化的例子)?我认为您可以避免在构建之间重命名资产,而是使用 CDN 的工具在更新到达时根据需要破坏缓存。
  • CDN 的工具是什么意思?

标签: web-applications deployment build-process cdn assets


【解决方案1】:

解决此问题的一种方法是正确分离业务逻辑和您的视图。 从长远来看,按照以下说明重构您的应用程序将使您受益。

1.根据您当前的业务逻辑构建 API。

2.使用 Angular、React、Backbone 等客户端技术将您的视图转换为完整的客户端应用程序。

您的客户端可以轻松推送到 CDN(或单独托管),并且只维护对您的服务器 API 的引用。

这样,您的服务器应用程序除了处理 API 调用外,对您的视图/客户端一无所知。

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 2014-03-31
    • 2021-02-10
    • 2021-01-22
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多