Django Compressor с URL-адресом S3 Heroku

В настоящее время я использую компрессор 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, а не запускать 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, поэтому, возможно, есть что-то несовместимое.


person Crazyconoli    schedule 07.06.2012    source источник
comment
Кажется, что запуск команды сжатия не повторяет файл манифеста. Так что, пока вы отключите безопасные URL-адреса до этого, все должно быть в порядке. Я сначала попробую и подтвержу.   -  person Crazyconoli    schedule 07.06.2012


Ответы (2)


Вы можете использовать AWS_QUERYSTRING_AUTH = False в настройках settings.py, чтобы предотвратить эти элементы строки запроса.

person Gumbah    schedule 07.11.2013

Я могу подтвердить, что при использовании команды управления сжатием вам нужно будет переделать файл манифеста. Я сделал это вручную, но я уверен, что есть лучший способ. Довольно небольшая проблема, но я потратил на это немного времени, и, возможно, это сэкономит кому-то еще время.

person Crazyconoli    schedule 07.06.2012
comment
Я не совсем понимаю. Как именно вы перестраиваете это вручную? - person Bob Spryn; 18.08.2012