【问题标题】:How do CDN's work with a Rails application?CDN 如何与 Rails 应用程序一起工作?
【发布时间】:2017-06-28 00:11:19
【问题描述】:

所以我阅读了 this 和 Rails 文档中关于 CDN 的 here ,但我仍然对概念上的一些事情感到困惑。

  1. 控制器和模型等 Rails 文件何时发挥作用?

  2. 如何在图片更新时使 CDN 缓存失效?

  3. 但是对于动态内容的文件来说,比如用户的姓名和地址。怎么处理的?

这是我的理解。如果我说错了,请纠正我:

首先,当向myrailsapp.com 发出请求时,请求首先转到CDN,因为我们现在将myrailsapp.com 的CNAME 指向CDN 地址(例如cdnmyrailsapp.com)。我猜 DNS 服务器理解将这些请求路由到 CDN。 CDN 检查它是否缓存了任何内容。如果没有,我猜 CDN 会将请求转发到实际服务器?这就是 Rails 的控制器被触发并将静态资产或 javascript 文件传送到 CDN 的时候。现在对该文件的所有未来请求都使用 CDN 上的缓存版本。

【问题讨论】:

  • 通常,请求会进入并被路由到控制器。它会在该操作中获取任何模型所需的任何数据,然后将该数据转发到视图。然后,这将在加载页面以供查看时从 CDN 获取任何数据。然后,Rails 将通过预编译的指纹 id 缓存这些资产。只有当这些资产发生变化时,它才会跳过缓存。
  • CDN 用于缓存资产(图像、样式表等不会动态更改)。 DNS 不知道 CDN,您的应用知道,因为您在 env.file 上设置了 config.action_controller.asset_host。因此,从 CDN 中“获取”资产的是 rails 应用程序。每当您请求动态的东西时,您的应用程序都会即时创建。该级别的缓存是在应用程序本身上完成的,而不是通过 CDN。

标签: ruby-on-rails cdn


【解决方案1】:

CDN 只能提供静态资源(编译后的 css 和 js 文件等),不能提供模型和控制器。 (您可以通过assets:precompile获取此预编译文件)

您的服务器直接提供所有动态内容,无需CDN

您的文件位于CDN 域(示例为http://c000000.cdn.rackspacecloud.com),您的应用程序留在您的域中(您不需要 CNAME)。

对于需要在上传时手动发送的图片(fog-awsfog gems)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2022-01-05
    相关资源
    最近更新 更多