2013-03-02 4 views
9

अमेज़ॅन एस 3 में gziped फ़ाइलों को भेजने के लिए django_compressor का उपयोग करना कैसे संभव है?क्या django_compressor/S3/gzip का उपयोग करना संभव है?

मैंने कई तरीकों से प्रयास किया लेकिन यह काम नहीं किया।

COMPRESS_ENABLED = True 
COMPRESS_OFFLINE = True 

COMPRESS_ROOT = STATIC_ROOT 
COMPRESS_URL = "http://xxx.cloudfront.net/" 
STATIC_URL = COMPRESS_URL 
COMPRESS_OUTPUT_DIR = 'CACHE' 

#COMPRESS_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
COMPRESS_STORAGE = 'core.storage.CachedS3BotoStorage' 

STATICFILES_STORAGE = 'compressor.storage.GzipCompressorFileStorage' 
COMPRESS_YUI_BINARY = 'java -jar contrib/yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar' 
COMPRESS_YUI_JS_ARGUMENTS = '' 
COMPRESS_CSS_FILTERS = ['compressor.filters.yui.YUICSSFilter'] 
COMPRESS_JS_FILTERS = ['compressor.filters.yui.YUIJSFilter'] 
COMPRESS_CSS_HASHING_METHOD = 'hash' 

और मेरे storage.py

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 
+0

मैं एक ही मुद्दे पर काम कर रहा हूँ, बस पर एक मुद्दा प्रस्तुत django_compressor's GitHub: https://github.com/jezdez/django_compressor/issues/368 – kevinharvey

+0

शुभकामनाएँ @ कच्छवे! मैं अगले संस्करण की प्रतीक्षा कर रहा हूं :- डी – Thomas

+0

कोई भी इसे सॉर्ट करता है? मैं इसे काम करने के लिए भी कोशिश कर रहा हूं। क्लाउडफ़्रंट उपयोगकर्ताओं के लिए – Murph

उत्तर

7

django-storages S3 भंडारण बैकएंड supports gzip: यहाँ मेरा आखिरी settings.py विन्यास है। settings.py में जोड़ें:

AWS_IS_GZIPPED = True 
+0

नोट: क्लाउडफ़्रंट सेवा प्राप्त करने के लिए पर्याप्त नहीं है gzipped संपत्ति –

5

कड़ी मेहनत और अनुसंधान के दिनों के बहुत बाद मैं अंत में यह करने के लिए कर रहा था और मैं इसके बारे में एक detailed guide लिखने का फैसला किया।

मूल रूप से आप कुछ काम करने होंगे:

  1. उपयोग AWS_IS_GZIPPED = True
  2. अपने S3 अमेरिका के बाहर है। आपको एक कस्टम S3Connection कक्षा बनाने की आवश्यकता है जहां आप DefaultHost वैरिएबल को अपने S3 url पर ओवरराइड करते हैं। उदाहरण s3-eu-west-1.amazonaws.com
  3. यदि आप एक बिंदीदार बाल्टी नाम का उपयोग कर रहे हैं, उदाहरण subdomain.domain.tld। आप AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat'
  4. निर्धारित करने की आवश्यकता आप अपने CachedS3BotoStorage

में non_gzipped_file_content = content.file सेट करने के लिए यह CachedS3BotoStorage वर्ग आप की जरूरत है:

class CachedS3BotoStorage(S3BotoStorage): 
    """ 
    S3 storage backend that saves the files locally, too. 

    """ 
    connection_class = EUConnection 
    location = settings.STATICFILES_LOCATION 

    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): 
     non_gzipped_file_content = content.file 
     name = super(CachedS3BotoStorage, self).save(name, content) 
     content.file = non_gzipped_file_content 
     self.local_storage._save(name, content) 
     return name 
+1

यह सही उत्तर है। यह भी देखें https://github.com/django-compressor/django-compressor/issues/404#issuecomment-18787650 – chhantyal

संबंधित मुद्दे