使用 Django 在 Heroku 部署中上传文件

File uploads in Heroku deployment with Django

所以我终于能够设置我正在处理的本地 + prod 测试项目。

# wsgi.py 
from dj_static import Cling, MediaCling

application = Cling(MediaCling(get_wsgi_application()))
application = DjangoWhiteNoise(application)

我使用 whitenoise(没有任何问题)设置静态文件,使用 dj_static 和 Postgres 为本地 + prod 设置媒体(文件上传)。一开始一切正常......静态文件,文件上传。

但是在 Heroku dynos 重启后我丢失了所有上传的文件。我的问题是,--- 因为我从 Django 应用程序而不是 S3 之类的东西提供媒体文件,所以 dyno 重新启动是否也会消除所有这些?

PS:我知道我可以使用 AWS 等来做到这一点,但我只是想知道这是否是我丢失所有上传内容的原因。

Since I'm serving the media files from the Django app instead of something like S3, does the dyno restart wipe all that out too?

是的!那就对了。根据 Heroku docs:

Each dyno gets its own ephemeral filesystem, with a fresh copy of the most recently deployed code.

参见 this answer and 答案。

结论:对于媒体文件(上传的),您必须使用一些外部服务(如 S3 或其他)。 whitenoise 仅适用于静态文件。请参阅 here 为什么 whitenoise 不适合为用户上传的(媒体)文件提供服务。