如何解决Django在Heroku上-缺少staticfiles manifest.json文件 编辑 - 澄清
我正在尝试在Heroku上启动Django。我环顾了Stack Overflow,尝试了不同的方法,但无法弄清楚。它看起来与Django上所有与staticfiles问题有关的问题相似,但是不幸的是,我不知道问题出在哪里。我的项目使用DEBUG = True
可以很好地运行,但是当我将其更改为False时,将得到以下回溯:
2020-11-09T13:13:42.801384+00:00 app[web.1]: Missing staticfiles manifest entry for 'order/css/open-iconic-bootstrap.min.css'
它发生在我所有需要静态文件的应用程序中。我试图找到manifest.json,但它不存在。所以我认为这是问题所在。
这是我的相关设置:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware','whitenoise.middleware.WhiteNoiseMiddleware',#more ...
]
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
django_heroku.settings(locals())
谢谢您的关注!
解决方法
评论中的@keome 已经为您提供了调试此问题的第一步,因此我不会在这里重复。
尽管他们提出了问题(应该首先查看),但我认为关键问题是您的白噪声配置未设置为生成清单。你可能想要:
# Serve compressed and manifested static files
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
您当前的配置适用于 DEBUG=1
的原因是在调试模式下,django 将回退以提供静态文件本身(既不安全也不高效)。
其次,确保您使用与运行服务器相同的存储配置运行 collectstatic
- 我看不到您拥有哪些设置文件,但您似乎收集了没有明显策略的静态数据,但您正在尝试使用显式策略来服务它(因此 django 对为什么没有清单感到困惑)。
顺便说一下,whitenoise 默认创建一个 staticfiles.json
文件,而不是一个 manifest.json
文件,它作为一个静态文件。因此,如果您的 STATIC_URL = "/static/"
那么您可以在 <your-domain>/static/staticfiles.json
处找到清单。
编辑 - 澄清
静态文件的清单实际上没有被称为 manifest.json
的原因是因为它与作为渐进式 Web 应用程序一部分的 manifest.json
的通常名称冲突 (spec here ),这有点相似(因为它可以作为浏览器的指令,指示在哪里可以找到某些文件)但不一样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。