我正在尝试在 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
具有与运行服务器相同的存储配置 - 我看不到您拥有哪些设置文件,但似乎您已经收集了静态数据而没有显示策略,但您正在尝试为其提供服务with清单策略(因此 django 对为什么没有清单感到困惑)。
顺便说一句,白噪声默认会创建一个staticfiles.json
文件,而不是manifest.json
文件,并且它作为静态文件。所以如果你的STATIC_URL = "/static/"
然后你可以在以下位置找到清单<your-domain>/static/staticfiles.json
.
编辑-澄清
实际上没有调用静态文件清单的原因manifest.json
是因为这会与通常的名称相冲突manifest.json
作为渐进式 Web 应用程序的一部分(规格在这里 https://developer.mozilla.org/en-US/docs/Web/Manifest),这有点相似(因为它可以作为浏览器在哪里查找某些文件的指令),但不一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)