我正在使用带有s3的django-pipeline。我成功地使用collectstatic
来组合我的Javascript文件并将它们存储在我的s3存储桶中,但是由于某种原因它们没有被压缩(通过查看文件,它的大小和内容编码来验证)。否则,使用合并后的scripts.js
工作正常。
以下是我使用django-pipeline所做的更改:
pipeline
。'pipeline.finders.PipelineFinder'
添加到STATICFILES_FINDERS
。STATICFILES_STORAGE = 'mysite.custom_storages.S3PipelineManifestStorage'
此类如文档中所定义,如下所示。PIPELINE_JS
,如下所示,它可以正常工作,但不会被压缩。PIPELINE_ENABLED = True
自DEBUG = True
以来我在本地运行。PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
即使这应该是默认的。npm -g install yuglify
安装Yuglify Compressor。PIPELINE_YUGLIFY_BINARY = '/usr/local/bin/yuglify'
即使env
的默认设置有效。{% load pipeline %}
和{% javascript 'scripts' %}
。更多细节:
PIPELINE_JS = {
'scripts': {
'source_filenames': (
'lib/jquery-1.11.1.min.js',
...
),
'output_filename': 'lib/scripts.js',
}
}
class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
location = settings.STATICFILES_LOCATION
如上所述,collectstatic
确实生成了scripts.js
而未压缩。该命令的输出包括:
Post-processed 'lib/scripts.js' as 'lib/scripts.js'
我正在使用Django 1.8,django-pipeline 1.5.2和django-storages 1.1.8。
类似的问题:
答案 0 :(得分:1)
缺少的步骤是扩展GZipMixin
,并且,它必须是父母列表中的第一个:
from pipeline.storage import GZIPMixin
class S3PipelineManifestStorage(GZIPMixin, PipelineMixin, ManifestFilesMixin, S3BotoStorage):
location = settings.STATICFILES_LOCATION
现在collectstatic
也会生成每个文件的.gz版本,但我的模板仍然没有引用.gz版本。
为了解决这个问题,作者says:
要使其与S3一起使用,您需要更改静态文件 存储url方法返回.gz urls(和staticfiles / pipeline 模板标签取决于您是否关心不支持的客户 gzip的)。另外不要忘记在s3上设置正确的标题来提供服务 这些资产被压缩了。
我改编了an example他提供的elsewhere,它覆盖了url
方法:
class S3PipelineManifestStorage(GZIPMixin, PipelineMixin, ManifestFilesMixin, S3BotoStorage):
location = settings.STATICFILES_LOCATION
def url(self, name, force=False):
# Add *.css if you are compressing those as well.
gzip_patterns = ("*.js",)
url = super(GZIPMixin, self).url(name, force)
if matches_patterns(name, gzip_patterns):
return "{0}.gz".format(url)
return url
这仍然无法设置Content-Encoding
标题。
更简单的替代方法是使用S3Boto Storages选项AWS_IS_GZIPPED
执行gzipping并设置相应的标头。
然而,需要更多支持没有gzip的客户端。
亚马逊在serving compressed files from S3上的这些说明也很有用。