首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django- Heroku & Amazon S3 "UncompressableFileError“上的压缩器错误

Django- Heroku & Amazon S3 "UncompressableFileError“上的压缩器错误
EN

Stack Overflow用户
提问于 2017-03-08 19:51:38
回答 1查看 612关注 0票数 2

因此,我知道已经有一些关于这个主题的文章,但我尝试了每一个组合的设置,使django-compressor工作,但没有成功。有什么想法吗?

settings.py

代码语言:javascript
复制
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # other finders..
    'compressor.finders.CompressorFinder',
)
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATIC_URL = '/static/'

DEFAULT_FILE_STORAGE = "mysite.s3utils.MediaS3BotoStorage"

COMPRESS_ROOT = STATIC_ROOT
STATICFILES_STORAGE = 'mysite.storage.CachedS3BotoStorage'
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_URL = STATIC_URL

s3utils.py

代码语言:javascript
复制
from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage


class StaticS3BotoStorage(S3BotoStorage):
    """
    Storage for static files.
    """

    def __init__(self, *args, **kwargs):
        kwargs['location'] = 'static'
        super().__init__(*args, **kwargs)


class MediaS3BotoStorage(S3BotoStorage):
    """
    Storage for uploaded media files.
    """

    def __init__(self, *args, **kwargs):
        kwargs['location'] = 'media'
        super().__init__(*args, **kwargs)


class CachedS3BotoStorage(S3BotoStorage):
    """
    S3 storage backend that saves the files locally, too.
    """
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.local_storage = get_storage_class(
            "compressor.storage.CompressorFileStorage")()

    def save(self, name, content):
        self.local_storage._save(name, content)
        super().save(name, self.local_storage._open(name))
        return name

index.html

代码语言:javascript
复制
{% load compress %}
{% compress css %}
<link href="{% static 'libs/twitter-bootstrap/css/bootstrap.min.css' %}" rel="stylesheet">
{% endcompress %}

错误:

compressor.exceptions.UncompressableFileError:'https://mysite.s3.amazonaws.com:443/libs/twitter-bootstrap/css/bootstrap.min.css‘无法通过COMPRESS_URL ('https://mysite.s3.amazonaws.com/static/')访问,无法压缩

因此,我从跟踪错误中了解到,由于django-compressor使用了以下代码,所以会引发此错误:

代码语言:javascript
复制
if not url.startswith(base_url):
    raise UncompressableFileError(
        "'%s' isn't accesible via COMPRESS_URL ('%s') and can't be"
        " compressed" % (url, base_url))

因此,似乎由于某种原因,COMPRESS_URL正在使用:443端口,并且缺少/static/后缀,否则它将工作。

设置:

  • Django诉1.10.6
  • Python v3.5
  • Django-压缩机2.1.1
EN

回答 1

Stack Overflow用户

发布于 2017-03-11 14:55:23

文档上看,您应该设置:

代码语言:javascript
复制
COMPRESS_URL = "http://mysite.s3.amazonaws.com/"

而不是像你的问题显示的那样的部分URL。但考虑到你使用的设置,我甚至不确定这是否是你的问题。(我的理解是,您希望压缩程序在S3上获取文件并在本地存储压缩结果)

看看班级,我会检查您在设置中为MEDIA_URL提供了什么,这可能是443端口的来源。

如果这没有帮助,我建议你贴出你的错误的全部追溯,它可能有助于了解正在发生的事情。

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

https://stackoverflow.com/questions/42680704

复制
相关文章

相似问题

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