Использование Heroku для медиафайлов Django

В домене heroku я не могу загрузить изображения из файлов мультимедиа (изображения, сохраненные с помощью свойства ImageField). Тем не менее, я могу видеть изображения, сохраненные в статическом поле, если я установил debug = True

Я сохраняю свои изображения, используя следующую команду:

image = models.ImageField(upload_to=upload_location, null=True, blank=True, width_field="width_field", height_field = "height_field")

И я могу ссылаться на них в своем шаблоне, делая что-то вроде этого:

<img src="{{ instance.image.url }}" class="img-responsive">

Где экземпляр передается из моего views.py примерно так:

instance = get_object_or_404(Post,slug=slug)
if instance.draft or instance.publish > timezone.now().date():
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
share_string = quote_plus(instance.content)
context = {
    "title": "Detail",
    "instance": instance,
    "share_string":share_string,
}
return render(request,"post_detail.html",context)

Спасибо

1 ответ

Решение

причина

Heroku запускает ваше приложение на dynos, и dynos переходит в спящий режим через 30 минут, если не поступает запрос, это заставляет Heroku не сохранять загружаемые пользователем медиа-файлы между перезапусками dynos.

Решение

Используйте сервис Amazon S3 для хранения и обслуживания медиа-файлов + вы также можете обслуживать статические файлы из S3. документацию смотрите здесь.

Файловая система Heroku недолговечна, поэтому дино загружаются с чистой копией файловой системы из самого последнего развертывания. Вот несколько способов обойти это:

  1. AWS S3
  2. Если вы не хотите создавать учетную запись в AWS для создания корзины S3, у Heroku есть надстройки для хранения и обработки статических активов.

Для получения дополнительных сведений об этой проблеме см. https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted.

Другие вопросы по тегам