2013-01-24 9 views
8

Sto eseguendo Rails 3.2 con assets_sync.Rails 3.2 + Heroku + S3 + CloudFront: non serve gzip css js

Viene creata una versione gz dei miei css e js. CloudFront non sta servendo la versione gzip anche se l'intestazione richiesta per gzip, deflate.

Ho anche provato config.gzip_compression = true in asset_sync.rb ma CloudFront sta ancora servendo la versione non compressa. Ho confermato che posso accedere a ABC.cloudfront.net/XYZ.css.gz

+0

config.gzip_compression = true in realtà fa il suo lavoro. Sostituisce i file con la loro versione gzip, quindi CloudFront servirà sempre la versione compressa. È molto probabile che tu abbia problemi con la cache, prova a rinominare il file. (o assicurati di aver digerito i tuoi nomi di file e il contenuto del file modificato) – icem

risposta

1

Hai impostato heroku config:add ASSET_SYNC_GZIP_COMPRESSION=true per la tua applicazione?

+0

sì, non sembra fare alcuna differenza – marcgg

4

L'origine della distribuzione CloudFront è un bucket S3? In tal caso, il problema è che S3 non gestisce l'intestazione Accept-Encodings correttamente: https://github.com/rumblelabs/asset_sync/issues/153

Esistono alcune soluzioni potenziali delineate in questo numero. Puoi utilizzare i file compressi con gzip per impostazione predefinita, poiché la maggior parte dei browser (ad eccezione di alcuni browser mobili) gestirà correttamente, oppure puoi provare lo solution outlined here.

Un'altra possibile soluzione è quella di utilizzare uno strato di cache Varnish come origine personalizzato per la vostra distribuzione CloudFront:

Internet -> CloudFront -> Vernice -> S3 Benna

Come arriva una richiesta di CloudFront, verrà inoltrato a Varnish se non è ancora stato memorizzato nella cache in CloudFront. Varnish preleva il file non compresso dal S3 Bucket, lo comprime come dettano le intestazioni e invia il file a CloudFront per la memorizzazione nella cache.

+0

Il tuo asset_sync.rb si trova in config/initializer? Ti sei assicurato che non stai ottenendo questa linea nel tuo log delle rotaie? "AssetSync: utilizzo della configurazione predefinita dall'inizializzatore integrato" – Bijan

+0

Ho finito per rilasciare la parte S3 e servire direttamente su cloudfront, ma la tua risposta ha molto senso. Avere una taglia :) – marcgg