django compressor install




Cómo configurar django-compressor en heroku, compresión fuera de línea a S3 (2)

Por mi parte, tengo una configuración muy similar, y estoy usando con éxito el compresor durante más de 2 años.

settings.py

COMPRESS_STORAGE = 'MyAwesomeApp.app.CachedS3BotoStorage.CachedS3BotoStorage'

AWS_ACCESS_KEY_ID = '#######'
AWS_SECRET_ACCESS_KEY = '########################+#########+BqoQ'
AWS_STORAGE_BUCKET_NAME = 'myAmazonS3cdn.myawesomewebsite.com'
AWS_S3_SECURE_URLS = False
AWS_QUERYSTRING_AUTH = False

COMPRESS_ROOT = 'MyAwesomeApp/static'
STATIC_ROOT = 'MyAwesomeApp/static/javascript'
COMPRESS_OUTPUT_DIR = 'compressed'
STATICFILES_STORAGE = COMPRESS_STORAGE

STATIC_URL = "http://myAmazonS3cdn.myawesomewebsite.com/"
COMPRESS_URL = STATIC_URL
COMPRESS_ENABLED = True

CachedS3BotoStorage.py

from django.core.files.storage import get_storage_class
from storages.backends.s3boto import S3BotoStorage

from django.core.files.base import File

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

Estoy ejecutando la compresión de python managep.py localmente y generando manifiesto en mi directorio de archivos estáticos. Heroku solo trata con el recopilatorio y entrega la versión de manifiesto más reciente a mi cdn.

Saludos,

Seguí todas las sugerencias de QA encontradas en SO y en diferentes blogs. Todo funciona bien en mi máquina de desarrollo y nada funciona en heroku.

aquí están mis configuraciones:

DEFAULT_FILE_STORAGE = 'arena.utils.MediaRootS3BotoStorage' # media files
# storage

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files

S3_URL = 'https://%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL + '/media/'

STATIC_URL = S3_URL + '/static/'

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'


COMPRESS_URL = STATIC_URL
COMPRESS_OFFLINE = True
COMPRESS_STORAGE = 'utils.CachedS3BotoStorage'
STATICFILES_STORAGE = COMPRESS_STORAGE

Cuando ejecuto collectstatic / compress todo está bien, veo los archivos que se están recogiendo en S3 y los coloco en los lugares apropiados. Veo el archivo manifiesto.

Cargando cualquier página con etiqueta de compresor, muestre un error OfflineGenerationError: You have offline compression enabled but key "d2a53169c44dec41ce3ee7da19b2b9d4" is missing from offline manifest. Ejecutar python manage.py compress nuevamente no resuelve nada. cuando miro el archivo de manifiesto, de hecho, la clave que busca no existe.

¿Qué está mal aquí?

Pregunta que ya revisé:

¿Cómo configurar django-compressor y django-staticfiles con Amazon's S3?

Compresor Django con S3 URL Heroku

Configuración de django-compressor con almacenamiento remoto (django-storage - amazon s3)


Encontré un repositorio git que contiene ganchos post_compile para resolver este problema. Se ejecuta comprimir después de Heroku construyó la aplicación Django (y también instala lessc si necesita menos en la configuración de su compresor).

https://github.com/nigma/heroku-django-cookbook





django-compressor