使用 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静态文件?