我正在使用django-管道与s3。我正在成功地使用collectstatic组合我的Javascript文件并将它们存储在我的s3桶中,但是由于某种原因它们没有被压缩(通过查看文件的大小和内容编码来验证)。否则,生成的组合scripts.js将正常工作。
下面是我为使用django管道所做的更改:
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压缩机。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-管线1.5.2和django-存储1.1.8。
类似的问题:
发布于 2015-07-29 01:33:44
缺少的步骤也是扩展GZipMixin,并且,它必须是父母列表中的第一位:
from pipeline.storage import GZIPMixin
class S3PipelineManifestStorage(GZIPMixin, PipelineMixin, ManifestFilesMixin, S3BotoStorage):
location = settings.STATICFILES_LOCATION现在,collectstatic也生成每个文件的.gz版本,但是我的模板仍然没有引用.gz版本。
要解决这个问题,作者他说
要使它与S3一起工作,您需要更改staticfiles存储url方法以返回.gz url(以及staticfiles/管道模板标记,这取决于您是否关心不支持gzip的客户端)。另外,不要忘记在s3上设置适当的头,以作为gzipped处理这些资产。
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存储选项AWS_IS_GZIPPED,它执行which并设置适当的标头。
但是,需要更多的支持没有gzip的客户端。
亚马逊在从S3提供压缩文件上的这些说明也很有用。
https://stackoverflow.com/questions/31679243
复制相似问题