即使在ALLOWED_HOSTS = [“ *”]

时间:2019-12-14 04:05:06

标签: python django python-3.x

我尝试浏览的每一页都出现500个错误。我唯一要更改的是将DEBUG更改为False。

这是我的配置:

SECRET_KEY = os.environ.get("SECRET_KEY", "0$ke!x1bz5cj0mpzo1zfx4omw-c9iqw%m95zb)(2@ddg5s+3!f")

ALLOWED_HOSTS = ['*']

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False


# Application definition

INSTALLED_APPS = [
    'posts', # Contains all dynamic and static pages related to posts
    'courses', # Contains all dynamic and static pages related to courses and modules
    'pages', # Contains all static pages that are not post related
    'markdownx', # Allows for editing and creating markdown content
    'jet.dashboard',
    'jet', # Django admin theme override
    'pwa', # Sets app to be PWA compliant
    'whitenoise.runserver_nostatic', # Serving static files
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

从字面上看,我所看到的每个答案都说只要将ALLOWED_HOSTS设置为['*'],就可以看到我已经做到了,但仍然没有骰子。我检查了文档,然后发现它们在其他调试模式效果上都很稀疏,其中有一部分文档说:

  

作为一项安全措施,Django将不包括可能敏感的设置,例如SECRET_KEY。具体来说,它将排除名称包括以下任何内容的任何设置:   “ API”   '键'   '通过'   '秘密'   '签名'   “令牌”

https://docs.djangoproject.com/en/2.2/ref/settings/#debug

我唯一能想到的是secret_key没有被拿走,但是如果是这样,您如何在生产中做到这一点?

编辑:有些人一直在要求我将调试模式设置为true以获得追​​溯。问题是,当我将其设置为true时,我没有得到500错误,只有DEBUG = False时。

3 个答案:

答案 0 :(得分:1)

因此,问题与未加载单个图标有关,该路径已关闭,但是由于当DEBUG = True我没有抓到静态文件且当DEBUG =时Django处理静态文件的方式(实际上是愚蠢的)错误,没有没有追溯。

我学到的一个巧妙技巧是,您可以通过在主设置中附加一个明确的记录器来强制Django为您提供所需的记录信息,如下所示:

import logging
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
        },
    },
}

因此,我在6个小时的调试中了解到的三件事是您遇到的情况:

  1. 在开发周期中立即设置DEBUG = False,这将迫使您正确配置collectstatic。
  2. Heroku的用于设置您的应用程序的文档在于如何正确配置WhiteNoise,因此这里是实际配置:
STATIC_URL = '/static/'

STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
   ]

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_STORAGE = '.storage.WhiteNoiseStaticFilesStorage' # Read point 3 for details about this
  1. 您必须在本地子类化WhiteNoises默认配置,以删除内置在manifest_strict属性中的Django(从此处获取:https://stackoverflow.com/a/51580328/11602400
from whitenoise.storage import CompressedManifestStaticFilesStorage


class WhiteNoiseStaticFilesStorage(CompressedManifestStaticFilesStorage):
    manifest_strict = False

答案 1 :(得分:0)

添加一个答案,因为这只花了我几个小时的调试时间,这也许可以使其他人摆脱同一问题。

我在某些管理页面上只得到SERVER ERROR 500。有些模型可以正常工作,有些则不能。我当时怀疑是第三方模块。

出现此问题的原因是我正在使用django-nested-inline,并且通过pip安装的版本中存在一个错误,该错误无法找到修改管理页面所必需的jQuery副本。处理嵌套的内联。

此错误已修复,因此我需要删除正在使用的版本,然后直接从Github安装该修复的版本。

答案 2 :(得分:0)

我解决了我的问题

  1. 输入DEBUG = True

  2. 运行 $ python manage.py收集静态

如果有任何错误,则您的静态文件中的任何错误都会出现在终端中。在继续之前,请尝试解决该错误。

  1. 进入您的主项目/settings.py 而不是通过使用“ *”作为允许的主机。 将其替换为您的本地主机链接 例如:127.0。 0.1。

  2. 进入浏览器的历史记录,并删除最近的cookie和缓存。

  3. 刷新您的项目,仅此而已。