4

I ' m пытается использовать django-compressor и django-storages-redux вместе с статическими файлами django и Amazon S3. Это мои настройки:UncompressableFileError: 'scripts/app.js' недоступен через COMPRESS_URL ('http://my-bucket.s3-us-west-2.amazonaws.com/') и не может быть сжат

STATIC_URL = COMPRESS_URL = 'http://my-bucket.s3-us-west-2.amazonaws.com/' 
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'compressor.finders.CompressorFinder', 
) 

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'site-static'), 
) 

COMPRESS_PRECOMPILERS = (
    ('text/scss', 'sass --scss --compass {infile} {outfile}'), 
) 

COMPRESS_CSS_FILTERS = [ 
    'compressor.filters.css_default.CssAbsoluteFilter', 
    'compressor.filters.cssmin.CSSMinFilter', 
] 

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
STATICFILES_STORAGE = COMPRESS_STORAGE = 'myapp.apps.mymodel.storage.CachedS3BotoStorage' 
COMPRESS_OUTPUT_DIR = 'cache' 
COMPRESS_ENABLED = False 

AWS_S3_HOST = "s3-us-west-2.amazonaws.com" 
AWS_ACCESS_KEY_ID = '---' 
AWS_SECRET_ACCESS_KEY = '---' 
AWS_STORAGE_BUCKET_NAME = 'my-bucket' 
AWS_QUERYSTRING_AUTH = False 
AWS_S3_CUSTOM_DOMAIN = 'my-bucket.s3-us-west-2.amazonaws.com' 

Для staticfiles я использую бэкэнда пользовательские хранения, в соответствии с рекомендациями здесь http://django-compressor.readthedocs.org/en/latest/remote-storages/

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 

Сначала я побежал python manage.py collectstatic, который работал хорошо и скопировать все файлы в S3.

Теперь у меня есть простой шаблон так:

{% load compress static %} 
<html><head> 
{% compress js %} 
    <script src="scripts/app.js"></script> 
    <script src="scripts/controllers/main.js"></script> 
{% endcompress %} 
</head><body></body></html> 

Открытие, что связано представление Джанго в браузере дает мне следующее исключение:

'scripts/app.js' isn't accessible via COMPRESS_URL ('http://my-bucket.s3-us-west-2.amazonaws.com/') and can't be compressed 

Но файл есть и доступны (через http и https). Исключение составляет здесь: https://github.com/django-compressor/django-compressor/blob/2.0/compressor/base.py#L82

Похоже, get_basename(self, url) (https://github.com/django-compressor/django-compressor/blob/2.0/compressor/base.py#L72) уже получает относительный URL-адрес здесь.

Кто-нибудь знает, как это исправить?

Заранее благодарен!

ответ

0

Seems like get_basename(self, url) (https://github.com/django-compressor/django-compressor/blob/2.0/compressor/base.py#L72) already receives a relative url here.

В этом проблема. Использование тега шаблона static для получения абсолютного URL-адреса должно исправить это.

{% load compress static %} 
<html><head> 
{% compress js %} 
    <script src="{% static "scripts/app.js" %}"></script> 
    <script src="{% static "scripts/controllers/main.js" %}"></script> 
{% endcompress %} 
</head><body></body></html> 

Вы также можете посмотреть на этот ответ https://stackoverflow.com/a/18400426

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