Django 1.11 + Amazon S3 для коллекционеров - PullRequest
0 голосов
/ 22 мая 2018

Я только что попытался передать свои статические файлы в производство с помощью Amazon S3 на eu-central-1.Я использую Elastic Beanstalk и Django 1.11.Кроме того, я использую boto3 и пакет Django Storages для него.Моя проблема в том, что, несмотря на то, что collectstatic сработал, а файлы теперь находятся в корзине S3, администратор Django по-прежнему не использует статические файлы.

Для контекста позвольте мне дать вам настройки, которые я использовал:

import os

from django.core.exceptions import ImproperlyConfigured

# Static files (CSS, JavaScript, Images)

STATICFILES_DIRS = [BASE_DIR.parent / 'myproject' / 'static']

INSTALLED_APPS += ['storages', ]


def get_env_variable(var_name):
    """Get the environment variable or return exception."""
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = 'Set the {} environment variable'.format(var_name)
        raise ImproperlyConfigured(error_msg)


AWS_ACCESS_KEY_ID = get_env_variable("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = get_env_variable("SECRET_ACCESS_KEY")
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_STORAGE_BUCKET_NAME = get_env_variable("BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'config.settings.aws.utils.StaticRootS3BotoStorage'

DEFAULT_FILE_STORAGE = 'config.settings.aws.utils.MediaRootS3BotoStorage'
MEDIA_URL = 'https://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
S3_USE_SIGV4 = True

Это настройки, а вот функции утилит, которые я написал:

from storages.backends.s3boto3 import S3Boto3Storage


def StaticRootS3BotoStorage(): return S3Boto3Storage(location='static')


def MediaRootS3BotoStorage(): return S3Boto3Storage(location='media')

У кого-нибудь есть идеи, что пошло не так?Почему работает collectstatic, но Django Admin не применяет css и javascript?

1 Ответ

0 голосов
/ 22 мая 2018

У меня слишком много символов '/'.

Я только исправил следующую строку:

AWS_S3_CUSTOM_DOMAIN = '%s.s3.eu-central-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

И теперь это работает.

...