Настройка Django Static_Root CDN для производства
Я использую Cropperjs и Opencv для пользователей, чтобы обрезать изображение, это требует временной загрузки файла в папку static_root
или media_root
, который удаляется после обрезки. Я использую Amazon S3 для статических файлов, но не знаю, как настроить static_root
для использования Amazon S3 в продакшене? Я использую Heroku для производства, если это имеет значение?
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
DEFAULT_FILE_STORAGE = "src.cdn.backends.MediaRootS3Boto3Storage" #backends.py
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static", # os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = BASE_DIR / "staticfiles-cdn" # CDN for production?
MEDIA_ROOT = BASE_DIR / "staticfiles-cdn" / "uploads"
TEMP = MEDIA_ROOT / "temp"
Согласно документации по хероку:
Django не будет автоматически создавать целевой каталог (STATIC_ROOT) который использует collectstatic, если он недоступен. Вам может понадобиться создать этот каталог в вашей кодовой базе, чтобы он был доступен, когда collectstatic будет запущен. Git не поддерживает пустые каталоги файлов, поэтому вам придется создать файл и внутри этого каталога.
.
Итак, для временного сохранения изображения перед загрузкой в AWS S3 работает следующий макет static_root:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(STATIC_ROOT, 'uploads')
TEMP = os.path.join(MEDIA_ROOT, 'temp')