使用 Heroku 处理 Django 媒体文件

Posted

技术标签:

【中文标题】使用 Heroku 处理 Django 媒体文件【英文标题】:Using Heroku for Django Media Files 【发布时间】:2017-05-19 08:29:33 【问题描述】:

在 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 提供静态文件。有关文档,请参阅 here.

【讨论】:

当存在不需要注册其他解决方案的解决方案时,不应接受指向第三方解决方案的答案。【参考方案2】:

Heroku 文件系统是短暂的,因此 dynos 使用最近部署的文件系统的干净副本启动。以下是一些解决此问题的方法:

    AWS S3 如果您不想通过 AWS 设置帐户来创建 S3 存储桶,Heroku has add-ons 处理静态资产的存储和处理

有关此问题的更多详细信息,请参阅 https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

【讨论】:

以上是关于使用 Heroku 处理 Django 媒体文件的主要内容,如果未能解决你的问题,请参考以下文章

如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?

如何调试带有whitenoise,gunicorn和heroku的Django静态文件?

当 Debug=False 时 Django Heroku 不提供静态文件

Heroku 上的 Django 静态文件

Heroku 上的 Django - 损坏的管理静态文件

使用 Heroku 的 Django 部署中缺少静态文件清单条目