我在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为所有人工作?提前感谢任何提示或解决方案。
答案 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
。