【问题标题】:Heroku Cedar - Static Assets - Rails 3.0.xHeroku Cedar - 静态资源 - Rails 3.0.x
【发布时间】:2012-01-08 20:34:07
【问题描述】:

我注意到当 serve_static_assets 设置为 false 时,heroku 在 Cedar 上注入了 rails3_serve_static_assets 中间件。我找到的只是this init script,它与 Heroku deploy 中提到的名称相匹配,它所做的一切都是重新启用静态资产的服务。

我正在尝试查找有关 Heroku 如何提供这些资产的更多信息,因为它们似乎并非直接来自 Rails 应用程序。

例如,当我查看 js 文件的标题时,它们看起来像这样:

Age:0
Connection:close
Content-Encoding:gzip
Content-Type:text/css
Date:Sun, 08 Jan 2012 19:04:05 GMT
Last-Modified:Sat, 07 Jan 2012 23:43:30 GMT
Server:nginx/0.7.67
Transfer-Encoding:Identity
Via:1.1 varnish
X-Varnish:677359987

我假设 Via:1.1 varnish 表示这些资产是通过 Varnish 提供的,但 the online documentation。关于这件事说 Varnish 在 Cedar 上不可用。

gzip 响应(底部)上的 Cedar docs 声明:

由于对 Cedar 应用程序的请求是直接向应用程序服务器发出的,而不是通过像 nginx 这样的 HTTP 服务器代理,因此任何响应压缩都必须在您的应用程序内完成。

但是我们可以清楚地看到资产是根据Content-Encoding 压缩的。现在我相当确定Rails 3.0.x 没有启用Rack::Deflater(无论如何它都没有出现在rake middleware 中)所以我对这个资产的方式有点困惑正在被 gzip 压缩。

这是 my next question 关于通过 Cloudfront 提供这些资产的前兆,但我的问题是:

谁能准确解释 Cedar re: 静态资产上发生了什么。即,什么在为我的资产服务(Rails、Ngnix、Varnish ??)以及什么是 gzip'ng 它们?

【问题讨论】:

    标签: ruby-on-rails-3 heroku assets


    【解决方案1】:

    如果您在标头中看到 Varnish,则表示您的域 CNAME 指向 proxy.heroku.com 而不是 proxy.herokuapp.com - Cedar 上没有 Varnish,但如果您使用,您会看到返回的标头proxy.heroku.com 它会工作,但它只是一个通过。它们将由 nginx 提供服务。

    【讨论】:

    【解决方案2】:

    用于 Bamboo 和 Cedar 堆栈的堆栈是相同的,除了一个区别,即清漆缓存在 Cedar 上不是“活动的”。这是因为 Cedar 支持流式传输,而 Varnish 不支持。

    因此,您的资产来自 Rails 流程。对于 Rails 3.0,这些显然只是普通的旧文件。如果您在 Rails 3.1 上使用资产管道,rake assets:precompile 进程将为您生成文件的 gzip 压缩版本并提供这些版本。

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 2012-02-05
      • 2014-08-29
      • 2011-09-13
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多