2012-06-07 1 views
5

В настоящее время я использую компрессоры django и хранилища django для запуска статического медиафайла s3. Мои файлы следующим образом:Django Compressor with S3 URL Heroku

Моего хранения согласно Документам:

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 при перезагрузке dyno, поскольку она просто замедляется.

Компрессор 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, поэтому, возможно, есть что-то несовместимое.

+0

Это кажется, что работает команда компресс не переделывать файл манифеста. Поэтому до тех пор, пока вы отключите защищенные URL до этого, все должно быть в порядке. Сначала я попробую и подтвержу. – Crazyconoli

ответ

-2

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

+2

Я не совсем понимаю. Как именно вы восстанавливаете это вручную? –

1

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

+0

Это на самом деле правильный ответ. – KVISH

Смежные вопросы