Heroku 不会在 Django 中收集静态数据,但会告诉它会收集静态数据

Heroku doesn't collect static on Django but tell that it does

命令heroku run python manage.py collectstaticreturns我这样

163 static files copied to '/app/live-static-files/static-root', 
509 post-processed.

这是我的设置:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # White Noise
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]
STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, "live-static-files", "static-root")

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

MEDIA_URL = "/media/"

MEDIA_ROOT = os.path.join(BASE_DIR, "live-static-files", "media-root")

DISABLE_COLLECTSTATIC = 0

通过 heroku run bash 我去 /app/live-static-files/static-root 并看到它是空的(该文件夹存在,因为它在 .gitkeep 的 repo 中)并且服务器对所有请求给出 500 错误。

现在 heroku run bash 我尝试 python manage.py collectstatic 并且成功了!但是在 heroku restart 之后它又是空的。

为什么 Heroku 告诉它它复制了 statics,甚至告诉 statics 文件夹的正确路径但实际上并没有这样做?为什么它实际上不这样做?

Heroku 文件系统是短暂的 - 这意味着在 dyno 运行 期间对文件系统的任何更改只会持续到该 dyno 关闭或重新启动。每个 dyno 都使用最近部署的文件系统的干净副本启动。这类似于有多少基于容器的系统,例如Docker,运行。

此外,在正常操作下,dynos 将在称为“循环”的过程中每天重新启动。

阅读这些文章:

https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

https://devcenter.heroku.com/articles/django-assets