【发布时间】:2022-01-25 14:38:16
【问题描述】:
我添加了几本关于 heroku 数据的书籍。每个模型都显示在 heroku 应用程序网站上及其图像。我的模型有“图像”字段。我从我的 PC 文件夹中获取这些图像,当我在 2-3 小时后打开这个应用程序时,书籍图像消失了。我认为这是因为我关闭了拍摄这些图像的电脑。我该如何正确地做到这些图像不会消失?
【问题讨论】:
标签: django heroku deployment
我添加了几本关于 heroku 数据的书籍。每个模型都显示在 heroku 应用程序网站上及其图像。我的模型有“图像”字段。我从我的 PC 文件夹中获取这些图像,当我在 2-3 小时后打开这个应用程序时,书籍图像消失了。我认为这是因为我关闭了拍摄这些图像的电脑。我该如何正确地做到这些图像不会消失?
【问题讨论】:
标签: django heroku deployment
我想是因为我关掉了我拍摄这些照片的电脑
这可能不是,因为 Heroku 无权访问您计算机上的文件。
当您将文件上传到 Django 管理员时,它会查看 DEFAULT_FILE_STORAGE 设置配置以确定如何存储该文件。 By default,它使用django.core.files.storage.FileSystemStorage,这意味着它正在将那些上传的文件写入dyno的文件系统中MEDIA_ROOT定义的位置。
问题是,测功机是短暂的,它们可以在没有任何警告的情况下被销毁、重新启动和移动,which replaces your filesystem。这意味着那些上传的文件只是被删除而无影无踪,但ImageField 引用仍然认为它们在那里。
此问题的解决方案是更新项目的 DEFAULT_FILE_STORAGE 以使用永久的东西,例如 s3 兼容的对象存储。在 Heroku 和 Django 领域,一个常见的解决方案是使用 django-storages 和 Heroku's Bucketeer add-on。此解决方案将您的文件上传到持久性数据存储,在 dyno 重新启动后仍然存在,而不是写入经常被删除的 dyno 文件系统。
我知道这可能会令人生畏,所以我写了 this article,对 Heroku + Bucketeer 过程进行了很好的描述。
【讨论】: