2

我正在尝试在 Heroku 上启动 Django。我环顾 Stack Overflow,尝试了不同的方法,但我无法弄清楚。它看起来类似于所有与 Django 上的静态文件问题相关的问题,不幸的是我不知道问题出在哪里。我的项目运行得很好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())

感谢您查看这个!

4

1 回答 1

2

评论中的@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.

编辑 - 澄清

静态文件的清单实际上没有被调用的原因是因为它与作为渐进式 Web 应用程序(此处为规范manifest.json)的一部分提供的常用名称冲突,这有点相似(因为它可以用作指令到哪里可以找到某些文件的浏览器)但不一样。manifest.json

于 2021-01-28T16:43:50.763 回答