Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3.2+;赫罗库+;S3和x2B;CloudFront:不提供gzip css js_Ruby On Rails_Heroku_Amazon S3_Gzip_Amazon Cloudfront - Fatal编程技术网

Ruby on rails Rails 3.2+;赫罗库+;S3和x2B;CloudFront:不提供gzip css js

Ruby on rails Rails 3.2+;赫罗库+;S3和x2B;CloudFront:不提供gzip css js,ruby-on-rails,heroku,amazon-s3,gzip,amazon-cloudfront,Ruby On Rails,Heroku,Amazon S3,Gzip,Amazon Cloudfront,我正在运行Rails 3.2和资产同步 创建了我的css和js的gz版本。CloudFront不提供gzip版本,即使为gzip请求的头文件是deflate 我还在asset\u sync.rb中尝试了config.gzip\u compression=true,但CloudFront仍然提供未压缩版本。我已经确认我可以访问ABC.cloudfront.net/XYZ.css.gz您是否为您的应用程序设置了heroku配置:add ASSET\u SYNC\u GZIP\u COMPRESSIO

我正在运行Rails 3.2和资产同步

创建了我的css和js的gz版本。CloudFront不提供gzip版本,即使为gzip请求的头文件是deflate


我还在
asset\u sync.rb
中尝试了
config.gzip\u compression=true
,但CloudFront仍然提供未压缩版本。我已经确认我可以访问ABC.cloudfront.net/XYZ.css.gz

您是否为您的应用程序设置了
heroku配置:add ASSET\u SYNC\u GZIP\u COMPRESSION=true

CloudFront发行版的来源是S3存储桶吗?如果是这样,问题是S3没有正确处理
Accept Encodings
头:

该问题概述了一些可能的解决办法。您可以在默认情况下为gzip文件提供服务,因为大多数浏览器(不包括一些移动浏览器)都能正确处理它,或者您可以尝试以下方法

另一种可能的解决方案是使用Varnish缓存层作为CloudFront发行版的自定义源:

互联网->CloudFront->Varnish->S3 Bucket


当一个请求进入CloudFront时,如果它还没有被缓存在CloudFront中,它将被转发到Varnish。Varnish将从S3存储桶中获取未压缩的文件,按照标题的指示对其进行压缩,然后将文件发送回CloudFront进行缓存。

您的asset_sync.rb是否位于config/initializers中?你有没有确保你的rails日志中没有这一行?“AssetSync:使用内置初始值设定项的默认配置”我最终放弃了S3部分并直接提供给cloudfront,但是您的回答很有意义。有一个赏金:)config.gzip_compression=true实际上完成了它的工作。它将文件替换为gzip版本,因此CloudFront将始终提供压缩版本。如果您最有可能遇到缓存问题,请尝试重命名您的文件。(或者确保文件名和文件内容的摘要已更改)