Ответ 1
Поэтому, прежде всего, важно понять, что если у вас есть куча файлов, которые являются частью вашего проекта (включая такие вещи, как изображения и т.д.) И развертываются вместе с ним, они скорее всего будут статическими файлами, чем медиафайлы в Django parlance.
Медиа файлы в Django предназначены для загруженных файлов времени исполнения. Они, как правило, хранятся с соответствующей записью db, такой как models.ImageField(upload_to='/photos')
но это не обязательно так.
Неправильная настройка вашего медиа для Heroku, так как вы все равно не должны писать в каталог на сервере (это то, что вы говорите Django, чтобы сделать с MEDIA_ROOT = os.path.join(BASE_DIR, "media")
.
Чаще всего вы вместо этого использовали ведро S3 для носителей на Heroku. Это довольно полное объяснение этого. Вероятно, вы можете пропустить бит о CORS и перейти на открытые разрешения на ведро (в зависимости от вашего варианта использования). Важными битами являются:
# settings.py
# Tell django what URL to server your media from
MEDIA_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
# Tell Django to use the boto storage backend to save media files.
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Если вы хотите использовать S3 для статического и медиа-хранилища, ссылка также объясняет это.
Возможно, вам захочется взглянуть на это репо для довольно полного сокращения настроек AWS и того, что они делают, плюс красиво упакованный пакет, чтобы сделать что-то из этого для вас.
В более общем плане я нашел Django Herokuify исключительно полезным для всех шаблонов на Heroku.