heroku上的资产的gzip压缩不适用于自定义域

时间:2014-02-22 04:00:00

标签: ruby-on-rails heroku dns compression deflate

我在heroku上有一个带有自定义域的应用程序。 www.mydomain.com拥有myapp.herokuapp.com的cname记录。 mydomain.com有301重定向到www.mydomain.com。我在Heroku Ceder堆栈上。我使用heroku_rails_deflate gem启用了gzip压缩。对于使用www.mydomain.com的请求,服务器不会使用gzip资产进行响应。

*编辑* * * 当我最初发布我的301重定向时,无法正常工作。现在,当我卷曲mydomain.com时,我收到了301响应。


curl -I -H 'Accept-Encoding: gzip' http://myapp.herokuapp.com/assets/application-7cbaf74d14cc5a5ab54262a43e4xxxxx.css 

curl -I -H 'Accept-Encoding: gzip' http://mydomain.com/assets/application-7cbaf74d14cc5a5ab54262a43e4xxxxx.css

两者都导致:

Age: 1390
Cache-Control: public, max-age=2592000, no-transform
Content-Encoding: gzip
Content-length: 19377

然而

curl -I -H 'Accept-Encoding: gzip' http://www.mydomain.com/assets/application-7cbaf74d14cc5a5ab54262a43e4xxxxx.css

结果:

Age: 7378
Cache-Control: public, max-age=2592000
Content-length: 119016

此外,机架缓存似乎为每个URL维护一个单独的缓存。日志显示:

cache: [HEAD /assets/application-7cbaf74d14cc5a5ab54262a43e4xxxxx.css] miss, store

对于使用myapp.herokuapp.com已经为同一资产提供新请求后的顶级域请求

编辑: 这是我的config.ru:

require ::File.expand_path('../config/environment',  __FILE__)
run Rails.application

** 另一个加法 *** ! nslookup使用opendns名称服务器显示两个不同的URL使用两个不同的IP地址,即使一个是另一个的cname(我不是dns专家) ! *

有没有办法让heroku对待不同的网址?如果没有,是否有可能让gzip为所有人工作?提前感谢任何提示或解决方案。

1 个答案:

答案 0 :(得分:3)

您需要将use Rack::Deflater添加到您的config.ru,以便让Heroku提供压缩资产。

你的config.ru看起来像这样:

require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Deflater
run Rails.application

There is a good discussion使用Rack::Deflater或其他替代方法在Heroku上提供压缩资源,但似乎人们不断回到Rack::Deflater