首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-带有s3存储的管道并没有压缩我的js

django-带有s3存储的管道并没有压缩我的js
EN

Stack Overflow用户
提问于 2015-07-28 14:26:49
回答 1查看 581关注 0票数 1

我正在使用django-管道与s3。我正在成功地使用collectstatic组合我的Javascript文件并将它们存储在我的s3桶中,但是由于某种原因它们没有被压缩(通过查看文件的大小和内容编码来验证)。否则,生成的组合scripts.js将正常工作。

下面是我为使用django管道所做的更改:

  1. 在安装的应用程序中增加了pipeline
  2. 'pipeline.finders.PipelineFinder'添加到STATICFILES_FINDERS中。
  3. STATICFILES_STORAGE = 'mysite.custom_storages.S3PipelineManifestStorage'设置为文档中定义的该类,如下所示。
  4. 设置PIPELINE_JS,如下所示,它可以工作,但不会被压缩。
  5. PIPELINE_ENABLED = True,因为DEBUG = True和我在本地运行。
  6. PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor',尽管这应该是默认的。
  7. npm -g install yuglify安装了Yuglify压缩机。
  8. PIPELINE_YUGLIFY_BINARY = '/usr/local/bin/yuglify',尽管默认的env应该能工作。
  9. 使用工作的{% load pipeline %}{% javascript 'scripts' %}

更详细的情况:

代码语言:javascript
复制
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,而不是压缩的。该命令的输出包括:

代码语言:javascript
复制
Post-processed 'lib/scripts.js' as 'lib/scripts.js'

我使用Django 1.8、django-管线1.5.2和django-存储1.1.8。

类似的问题:

EN

回答 1

Stack Overflow用户

发布于 2015-07-29 01:33:44

缺少的步骤也是扩展GZipMixin,并且,它必须是父母列表中的第一位:

代码语言:javascript
复制
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处理这些资产。

我修改了一个例子,他提供了其他地方,它覆盖了url方法:

代码语言:javascript
复制
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提供压缩文件上的这些说明也很有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31679243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档