2013-01-24 21 views
8

Tôi đang chạy Rails 3.2 với asset_sync.Rails 3.2 + Heroku + S3 + CloudFront: Không phân phát gzip css js

Phiên bản gz của css và js của tôi được tạo. CloudFront không phân phát phiên bản gzip mặc dù tiêu đề được yêu cầu cho gzip, giảm phát.

Tôi cũng đã thử config.gzip_compression = true trong asset_sync.rb nhưng CloudFront vẫn đang phân phát phiên bản chưa nén. Tôi đã xác nhận rằng tôi có thể truy cập ABC.cloudfront.net/XYZ.css.gz

+0

config.gzip_compression = true thực sự là công việc. Nó thay thế các tập tin với phiên bản gzipped của họ để CloudFront sẽ luôn luôn phục vụ phiên bản nén. Bạn có nhiều khả năng gặp vấn đề với bộ nhớ đệm, hãy thử đổi tên tệp của bạn. (hoặc chắc chắn rằng bạn đã tiêu hóa tên tập tin và nội dung tập tin của bạn thay đổi) – icem

Trả lời

1

Bạn đã đặt heroku config:add ASSET_SYNC_GZIP_COMPRESSION=true cho đơn đăng ký của mình phải không?

+0

có, dường như không tạo ra bất kỳ sự khác biệt nào – marcgg

4

Nguồn gốc cho phân phối CloudFront của bạn có phải là thùng S3 không? Nếu vậy, vấn đề là S3 không xử lý chính xác tiêu đề Accept-Encodings: https://github.com/rumblelabs/asset_sync/issues/153

Có một số giải pháp tiềm năng được nêu trong vấn đề đó. Bạn có thể phục vụ tệp gzipped theo mặc định, vì hầu hết các trình duyệt (ngoại trừ một số trình duyệt di động) sẽ xử lý nó đúng cách, hoặc bạn thử dùng solution outlined here.

Một giải pháp khả thi là sử dụng một lớp bộ nhớ cache Varnish là nguồn gốc tùy chỉnh để phân phối CloudFront của bạn:

Internet -> CloudFront -> Varnish -> S3 Bucket

Là một yêu cầu đến để CloudFront, nó sẽ được chuyển tiếp tới Varnish nếu nó chưa được lưu trữ trong CloudFront. Varnish sẽ lấy tập tin không nén từ S3 Bucket, nén nó như là tiêu đề ra lệnh, và gửi tệp trở lại CloudFront để lưu vào bộ nhớ đệm.

+0

asset_sync.rb của bạn có nằm trong config/initializers không? Bạn đã đảm bảo rằng bạn không nhận được dòng này trong nhật ký đường ray của bạn? "AssetSync: sử dụng cấu hình mặc định từ trình khởi tạo tích hợp" – Bijan

+0

Tôi đã kết thúc phần S3 và phân phối trực tiếp lên mặt tiền, nhưng câu trả lời của bạn có ý nghĩa rất nhiều. Có tiền thưởng :) – marcgg

Các vấn đề liên quan