Heroku / Django / S3: статические файлы, не обслуживаемые с S3, даже если носитель работает - PullRequest
0 голосов
/ 03 октября 2018

Я настроил свое приложение Heroku / Django для обслуживания медиа-файлов из S3, используя это руководство некоторое время назад.В то время я заботился только о медиафайлах на S3, поэтому изначально я не использовал пользовательское хранилище и сохранял файлы в корне своей корзины S3.Но это работает.

Тем не менее, теперь я хочу сохранить свои статические файлы на S3, потому что у меня есть несколько статических видео, и они больше, чем я хочу обслуживать из моего динамометра.Но когда я настраиваю статические файлы в соответствии с руководством, они все еще работают от dyno.Вот мои настройки:

...

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'storages',

    ...
]   

...

# Django storages configuration
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_BUCKET')
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_AUTO_CREATE_BUCKET = False
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_S3_ENCRYPTION = True
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}   
AWS_LOCATION = 'static'

# Static file storage
STATICFILES_STORAGE = 'core.custom_storages.StaticStorage'
STATICFILES_LOCATION = 'static'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = 'https://{}/{}/'.format(AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
)

# Media file storage
DEFAULT_FILE_STORAGE = 'core.custom_storages.MediaStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media')

...

А вот custom_storages.py:

$ cat core/custom_storages.py 
# custom_storages.py
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage

class StaticStorage(S3Boto3Storage):
    location = 'static'

class MediaStorage(S3Boto3Storage):
    location = ''

Опять же, чтобы быть понятным, хранилище мультимедиа работает и служит из корзины s3правильно.Так что мне действительно непонятно, что статических файлов нет.

РЕДАКТИРОВАТЬ: Когда я нажимаю на Heroku, я вижу это в журналах, что указывает на то, что я даже не копирую в S3:

remote: -----> $ python manage.py collectstatic --noinput
remote:        2090 static files copied to '/tmp/build_a69320678067fe5b2ce29ed74018de75/core/staticfiles', 2188 post-processed.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...