2012-06-07 6 views
5

현재 s3에서 정적 미디어를 실행하려면 django 압축기와 django 저장 장치를 사용하고 있습니다. 다음과 같이 내 파일은 : 워드 프로세서에 따라S3 URL을 가진 Django 압축기 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', 
] 

이 내가 선택한 이유입니다 오프라인 압축을 사용하고 dyno 재시작시 collectstatic을 실행하는 대신 manage.py compress 명령을 실행하는 것이 느려지는 것입니다.

Django 압축기는 쿼리 문자열을 제공하지만 위의 HTML에는로드되지 않는 html이 포함되어 있습니다. 즉

<link rel="stylesheet" href="site-url/static/CACHE/css/da0c0fa8dd51.css?Signature=Signature&amp;Expires=Expires&amp;AWSAccessKeyId=key 

2 개의 amp; 항목이 없어야합니다. 차라리 안전 할 것이지만 AWS_S3_SECURE_URLS = False로 설정을 변경해도 문제가없는 것으로 생각됩니다.

저는 django 1.4를 사용하고 있습니다. 어쩌면 호환되지 않는 무언가가있을 수 있습니다.

+0

을 방지하기 위해 settings.py에 AWS_QUERYSTRING_AUTH = False를 사용할 수 있습니다. 따라서 보안 URL을 사용 중지하기 전에 보안 URL을 해제해야합니다. 먼저 해보고 확인해 보겠습니다. – Crazyconoli

답변

-2

압축 관리 명령을 사용하는 경우 매니페스트 파일을 다시 실행해야합니다. 수동으로했는데 더 나은 방법이 있다고 확신합니다. 꽤 작은 문제이지만 이것에 약간의 시간을 보냈습니다. 아마도 누군가 다른 사람을 구할 것입니다.

+2

나는 따라하지 않는다. 수동으로 정확히 이것을 다시 빌드합니까? –

1

당신은 압축 명령을 실행하면 매니페스트 파일을 다시 실행하지 않는 것 같다 그 쿼리 문자열 항목

+0

이것은 실제로 정답입니다. – KVISH