2013-01-24 71 views
8

我使用assets_sync運行Rails 3.2。Rails 3.2 + Heroku + S3 + CloudFront:未提供gzip css js

我創建了一個gz版本的css和js。即使gzip請求的頭文件,放棄,CloudFront也不提供gzip版本。

我也試過config.gzip_compression = trueasset_sync.rb,但CloudFront仍在提供未壓縮版本。我已確認我可以訪問ABC.cloudfront.net/XYZ.css.gz

+0

config.gzip_compression = true實際上它是工作。它使用gzip版本替換文件,因此CloudFront將始終提供壓縮版本。您最有可能有緩存問題,請嘗試重命名您的文件。 (或者確保你的文件名和文件內容已被更改) – icem

回答

1

您是否爲您的應用程序設置了heroku config:add ASSET_SYNC_GZIP_COMPRESSION=true

+0

是的,它似乎沒有任何區別 – marcgg

4

CloudFront發行版的來源是S3存儲桶嗎?如果是這樣,問題是S3不正確處理Accept-Encodings標頭:https://github.com/rumblelabs/asset_sync/issues/153

該問題中概述了一些潛在的解決方案。您可以默認提供gzip文件,因爲大多數瀏覽器(不包括某些移動瀏覽器)會正確處理它,或者您可以嘗試使用solution outlined here

另一種可能的解決方案是使用清漆緩存層爲您的CloudFront的分發自定義的由來:

互聯網 - > CloudFront的 - >光油 - > S3鬥

作爲一個請求進入CloudFront,如果尚未在CloudFront中緩存,則會將其轉發給Varnish。 Varnish將從S3 Bucket中獲取未壓縮的文件,按照頭文件的指示對其進行壓縮,然後將文件發送回CloudFront進行緩存。

+0

您的asset_sync.rb位於config/initializers中嗎? 你確定你沒有在你的rails日誌中找到這條線嗎? 「AssetSync:使用內置初始化程序的默認配置」 – Bijan

+0

我最終放棄了S3部分並直接向雲端服務,但您的答案很有意義。有一個賞金:) – marcgg

相關問題