2013-07-29 30 views
25

Về cơ bản, hàm băm trên tệp bộ nhớ cache không được cập nhật.Django pipeline Cache Busting không cập nhật tệp đệm/băm

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage): 
    pass 

PIPELINE_JS = { 
'main.js': { 
    'output_filename': 'js/main.min.js', 
    'source_filenames': [ 
     'js/external/underscore.js', 
     'js/external/backbone-1.0.0.js', 
     'js/external/bootstrap-2.2.0.min.js', 
    ] 
    } 
} 

Khi tôi lần đầu tiên chạy lệnh collectstatic, nó đúng cách tạo ra một bộ nhớ cache file có tên "main.min.d25bdd71759d.js

Bây giờ khi tôi chạy lệnh busting, tuy nhiên, nó là không ghi đè lên tập tin lưu trữ (và cập nhật băm) trong giai đoạn xử lý bài đăng

Nó tiếp tục cập nhật "main.min.js", chẳng hạn như main.min.js là hệ thống tệp hiện tại của tôi. tệp đã thay đổi.

Khi tôi tự xóa các tập tin lưu trữ trên AWS, tôi nhận được thông báo sau từ chạy collectstatic với tính cách rườm rà thiết lập để 3:

Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js 

settings.DEBUG được thiết lập để False

Tại sao sẽ không băm cập nhật?

+0

Xin vui lòng, chương trình cài đặt liên quan: PIPELINE_ENABLED, STATICFILES_STORAGE, STATICFILES_FINDERS – krasnoperov

+5

Bạn có thể chắc chắn rằng main.min.js là khác nhau từ trước đó? Hàm băm sẽ không thay đổi nếu không có bất kỳ thay đổi nào trong tệp. Có vẻ như bạn chỉ bao gồm các thư viện trong main.js, mà bạn không nên chỉnh sửa, vì vậy đó là lý do tại sao tôi yêu cầu. –

+0

Bạn đã đề cập đến bạn lưu trữ AWS của người dùng (tôi giả sử boto). Bạn có thể kiểm tra xem vấn đề vẫn còn tái tạo nếu bạn đường dẫn tĩnh đến thư mục cục bộ (không phải AWS). Tôi cho rằng đó có lẽ là vấn đề boto nhất. –

Trả lời

0

Hãy thử sử dụng lưu trữ biểu hiện thay vì:

class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage): 
    pass 

Theo các tài liệu django đây https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/#cachedstaticfilesstorage nó không được khuyến khích sử dụng CachedStaticFilesStorage.

Tên tệp của bạn cho tệp tĩnh có thể đang được lưu vào bộ nhớ cache. Vì vậy, hãy sử dụng tệp kê khai.

CachedStaticFilesKhông được đề xuất - trong hầu hết các trường hợp, ManifestStaticFilesStorage là lựa chọn tốt hơn. Có một số hình phạt về hiệu suất khi sử dụng CachedStaticFilesStorage vì thiếu bộ nhớ cache yêu cầu các tệp băm trong thời gian chạy. Lưu trữ tệp từ xa yêu cầu một số chuyến đi khứ hồi để băm một tệp trên bộ nhớ cache, vì một số truy cập tệp được yêu cầu để đảm bảo rằng tệp băm đúng trong trường hợp đường dẫn tệp lồng nhau.

Chú giải này cũng được ghi nhận tại django-đường ống http://django-pipeline.readthedocs.io/en/latest/storages.html#using-with-other-storages