【问题标题】:Django compressor using gzip to serve javascriptDjango 压缩器使用 gzip 来提供 javascript
【发布时间】:2013-09-24 18:16:16
【问题描述】:

我正在尝试从 amazon s3 提供 gzip 文件。 这是我的 settings.py:

AWS_IS_GZIPPED = True
AWS_PRELOAD_METADATA = True 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'elasticbeanstalk-eu-west-1-2051565523'
STATIC_URL = 'https://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
COMPRESS_OFFLINE = True
COMPRESS_ENABLED = True
COMPRESS_URL = STATIC_URL
COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
    'compressor.filters.jsmin.JSMinFilter',
]
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage' 

当我这样做时,django 会为每个 *.js 和 *.css 压缩创建 *.gz 文件,但奇怪的是只有 *.css 文件作为 gzip 提供。我可以在 aws s3 上看到 .css 文件具有 Content-Encoding: gzip 而 *.js 没有。这是怎么回事?

【问题讨论】:

  • 请问你为什么定义COMPRESS_STORAGE两次?
  • @MarcusLind 我编辑了这个问题。感谢您的来电

标签: python django amazon-web-services gzip django-compressor


【解决方案1】:

我遇到了同样的问题,并且能够通过将 text/javascript 添加到 GZIP_CONTENT_TYPES 设置来解决此问题,如下所示:

GZIP_CONTENT_TYPES = (
    'text/css',
    'application/javascript',
    'application/x-javascript',
    'text/javascript'
)

我不知道为什么,但是django-storages==1.1.8GZIP_CONTENT_TYPES 的默认值似乎不包括text/javascript,因此django-compressor 似乎跳过了具有此内容类型的压缩.JS 文件的GZIP。

见:http://code.larlet.fr/django-storages/src/e27c8b61ab57e5afaf21cccfee005c980d89480f/storages/backends/s3boto.py?at=default#cl-236

【讨论】: