【问题标题】:Django seamless upgrades with CDNDjango 与 CDN 无缝升级
【发布时间】:2011-09-24 16:07:52
【问题描述】:

[我正在使用 AWS,但我认为这个问题与所有 CDN 有关]

我希望将我的 Django 服务器无缝部署到 AWS 云。
所有静态内容(例如图像、javascript 等)都转到 Amazon Cloudfront CDN。
问题是我试图使升级尽可能“原子”,而我几乎无法控制 CDN 对象失效的时间。
根据 TFM,解决方案是对我的对象进行版本控制,即重命名它们并添加版本 ID,例如箭头_v123.png。显然,如果新服务器指向 arrow_v124​​.png,我可以完全控制整个分发的时间。
我查了一下,据我所知,大男孩们正在这样做——Facebook 静态内容对象有一个散列名称(和路径)。

但我如何在 DJANGO 中自动执行此操作?

我需要以某种方式:

  • 生成新版本号
  • 更改所有静态对象的所有名称
  • 更改所有模板和 python 代码以使用这些新名称

或者以某种方式与开发过程相结合:

  • 我编辑图片或 javascript 文件
  • 我保存它,它得到了一个新名字?!?!并且所有对它的引用都会自动更正?!?!

我正在使用 Fabric 进行部署,因此我需要以某种方式修改我的 fabfile。

请帮忙。

塔尔。

【问题讨论】:

    标签: python django amazon-web-services cdn fabric


    【解决方案1】:

    http://www.allbuttonspressed.com/projects/django-mediagenerator 提供资产版本控制。它提供了一个函数和一个模板标签,可以根据实际文件名为您提供版本化文件名。它还有一些不错的附加功能,例如 js/css 缩小和连接。

    【讨论】:

      【解决方案2】:

      看看 html5boilerplate,有 ant 构建脚本,以及做很多其他事情,将静态 js/CSS 引用重命名为随机数,并将模板文件中的任何引用更改为这些新的随机编号 js/CSS .我不认为它对图像资产有相同的作用,但我认为可以更改 ant 文件以执行相同的操作。

      html5boilerplate的Django端口在这里:https://bitbucket.org/samkuehn/django-html5-boilerplate

      【讨论】:

      • 这是一个完整的 Django 项目样板,所以它自然有很多(有趣但)不相关的东西。如果您从头开始,看起来不错。
      【解决方案3】:

      在我看来最后一部分(更改所有模板和 python 代码以使用新名称)很容易。将当前样式“版本号”存储在您的设置中。确保使用模板上下文将此版本号传递给您的模板。然后,在渲染模板时使用它来选择静态文件的真实 URL。

      发布一组新的静态文件所涉及的步骤是:

      1. 将新文件发布到您的 CDN
      2. 编辑您的设置文件
      3. 重新加载您的应用程序设置

      您可以通过将版本号存储在数据库中而不是设置中来使用类似的方案来实现相同类型的效果。这避免了重新加载并且更改是即时的,但会在每个视图呈现时添加一个 DB 查询。

      如何将这些步骤中的每一个集成到您的开发过程中取决于您自己。可以(有条件地)自动发布到 CDN、编辑设置文件并重新启动应用程序。要轻松“编辑”设置文件,您可以将版本号存储在单独的文件中,并让设置文件在启动时读取。

      【讨论】:

        【解决方案4】:

        我会在您经常更新的所有静态资产的末尾附加一个随机字符串。

        示例:style.css 将变为 style.css?ASFDSF34343SDSFDSF

        在调试模式下,我确保随机字符串在每次请求时都会更改,因此我的更改会立即生效。 (这可以防止浏览器缓存)

        在生产环境中,随机字符串仅在启动时生成一次,然后重复使用。

        您可以使用它,以便在您的网络服务器重新启动后随机字符串仍然存在。

        无论是在开发过程中还是在生产过程中,这对我来说都非常有效。

        请注意,我将资产保存在 S3 上,尚未启用 CloudFront。

        这是一个实际的例子:

        http://static.outsourcefactor.com/css/main.css?ASDFASFASF434434

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          相关资源
          最近更新 更多