Django компрессор и Cloudfront - PullRequest
0 голосов
/ 25 мая 2020

Я использую AWS S3 для хранения файлов Django stati c (используя django -хранилища). И альтернативное имя домена облачного интерфейса для обслуживания этих файлов.

Я не могу завершить sh Django компрессор через python manage.py compress.

Это ошибка, которую я вижу:

CommandError: An error occurred during rendering /home/ubuntu/foldername/templates/home/xxx.html: 'https://xxx.domainname.com/static/plugins/xxx-xxx/xxx.js' isn't accessible via COMPRESS_URL ('https://s3bucket-static.s3.amazonaws.com/') and can't be compressed

Итак, я попытался использовать адрес облачного интерфейса по умолчанию, альтернативное доменное имя и корзину S3 для COMPRESS_URL:

Только https://domainname.com/static/ без ошибок. Что происходит, так это то, что после выполнения compress папка CACHE появляется внутри папки локального экземпляра staticfiles. Это неправильно, поскольку я хотел, чтобы папка CACHE находилась внутри корзины S3.

Вот мои настройки для django компрессора:

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

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

if not DEBUG:
    COMPRESS_URL = env('COMPRESS_URL')

Вот мои django - настройки хранилищ:

if not DEBUG:
    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
    STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

    AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
    AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')

    AWS_DEFAULT_ACL = None
    AWS_CLOUDFRONT_DOMAIN_NAME = env('AWS_CLOUDFRONT_DOMAIN_NAME')
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_CLOUDFRONT_DOMAIN_NAME}.com'

    AWS_S3_OBJECT_PARAMETERS = {
        'CacheControl': 'max-age=86400',
    }
    AWS_LOCATION = 'static'

настройки для стати c файлов:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATICFILES_DIRS = os.path.join(BASE_DIR, 'static/')

1 Ответ

0 голосов
/ 25 мая 2020

Это сработало после того, как я изменил настройки django -компрессора на это:

# django-compressor
COMPRESS_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

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

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

if not DEBUG:
    STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'
    COMPRESS_ROOT = STATIC_ROOT
    COMPRESS_URL = STATIC_URL
...