Использование 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 недолговечна, поэтому дино загружаются с чистой копией файловой системы из самого последнего развертывания. Вот несколько способов обойти это:
- AWS S3
- Если вы не хотите создавать учетную запись в AWS для создания корзины S3, у Heroku есть надстройки для хранения и обработки статических активов.
Для получения дополнительных сведений об этой проблеме см. https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted.