带有S3 URL Heroku的Django Compressor

时间:2012-06-07 09:46:28

标签: django django-storage django-compressor

我目前正在使用django压缩器和django存储来运行s3的静态媒体。我的文件如下:

根据文档我的存储空间是:

from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage

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

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

我的设置是:

# S3 Storage Section
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
# AWS_S3_SECURE_URLS = False #turns off https for static files (necessary)

# Used to make sure that only changed files are uploaded with collectstatic
AWS_PRELOAD_METADATA = True

# Django compressor settings
STATICFILES_FINDERS += (
                        'compressor.finders.CompressorFinder',
                        )
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_STORAGE = 'erp.storage.CachedS3BotoStorage'
STATICFILES_STORAGE = 'erp.storage.CachedS3BotoStorage'
AWS_LOCATION = 'static'
AWS_QUERYSTRING_EXPIRE = 7200

COMPRESS_JS_FILTERS = [
    'compressor.filters.template.TemplateFilter',
]

有很多媒体要压缩,这就是为什么我选择使用离线压缩并运行manage.py compress命令而不是在dyno restarts上运行collectstatic,因为它只是为了减慢速度。

Django压缩器为我提供了一个很好的查询字符串,但是它包含了不加载的html。即

<link rel="stylesheet" href="site-url/static/CACHE/css/da0c0fa8dd51.css?Signature=Signature&amp;Expires=Expires&amp;AWSAccessKeyId=key 
这两个放大器;物品不应该在那里。我宁愿让它安全但我也在设置中尝试了AWS_S3_SECURE_URLS = False,这似乎没有改变让我觉得有什么不对的东西。

我正在使用django 1.4,所以可能存在不兼容的东西。

2 个答案:

答案 0 :(得分:1)

您可以在settings.py中使用AWS_QUERYSTRING_AUTH = False来阻止这些查询字符串项

答案 1 :(得分:-2)

我可以确认,如果使用压缩管理命令,则需要重做清单文件。我是手动完成的,但我确信有更好的方法。相当小的问题,但我花了一点时间在这上面,也许它会节省一些时间。