簡體   English   中英

即使使用 ALLOWED_HOSTS=["*"] 在 django 上使用 debug=False 也遇到 500 錯誤

[英]Hitting 500 error on django with debug=False even with ALLOWED_HOSTS=["*"]

我嘗試使用的每個頁面上都有 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 設置為 ['*'],正如您所看到的,我已經這樣做了,但仍然沒有骰子。 我檢查了文檔,它們對 DEBUG 模式的其他影響非常稀疏,文檔的一部分說:

作為一項安全措施,Django 不會包含可能敏感的設置,例如 SECRET_KEY。 具體來說,它將排除名稱包含以下任何一項的任何設置:'API' 'KEY' 'PASS' 'SECRET' 'SIGNATURE' 'TOKEN'

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

我唯一能想到的是 secret_key 沒有被拿起,但如果是這樣,你如何在生產中做到這一點?

編輯:有些人一直要求我將調試模式設置為 true 以獲取回溯。 問題是,當我將它設置為 true 時,我沒有收到 500 錯誤,只有在 DEBUG = False 時才會出現。

因此,該問題與 SINGLE ICON NOT LOADING 相關,路徑已關閉,但由於 Django 在 DEBUG=True 時處理靜態文件的方式(老實說是愚蠢的)我沒有發現它,而當 DEBUG=False 時有沒有追溯。

我學到的一個巧妙的技巧是,您可以通過在主 settings.py 中附加一個顯式記錄器來強制 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. 把調試=真

  2. 運行 $ python manage.py collect static

如果有任何錯誤,您的靜態文件中的任何錯誤都會出現在您的終端中。 在繼續之前嘗試解決該錯誤。

  1. 進入你的主項目/settings.py 而不是通過使用“*”來創建一個通用的允許主機。 將其替換為您的本地主機鏈接,例如:127.0.0。 0.1.

  2. 進入瀏覽器的歷史記錄並刪除最近的 cookie 和緩存。

  3. 刷新您的項目,僅此而已。

添加一個答案,因為這只是花了我幾個小時來調試,這可能會使其他人免於遇到同樣的問題。

我只在某些管理頁面上收到SERVER ERROR 500 有些模型可以正常工作,有些則不行。 我當時懷疑是第三方模塊。

這個問題出現在我身上,因為我使用的是django-nested-inline並且通過pip安裝的版本中存在一個錯誤,無法找到修改管理頁面以處理嵌套內聯所需的 jQuery 副本。

此錯誤已修復,因此我需要刪除我正在使用的版本,然后直接從 Github 安裝已修復的版本。

添加一個答案,因為這讓我難住了一段時間和很多答案,雖然它們確實適用於收集您的靜態文件,但如果您在 HTML 中有任何文件/圖像/CSS/js 引用不是,服務器錯誤 500 也可能發生實際上存在於您的項目目錄中。 例如,如果您引用<link href="{% static 'app/css/newStyle.css' %}" rel="stylesheet" />並且該文件不存在,那么您將收到此錯誤。 檢查哪些文件實際上不存在的最佳方法是在本地環境中運行python manage.py runserver並加載頁面,以查看終端中出現 404 錯誤的位置,

它可能看起來像這樣: "GET /static/app/css/newStyle.css HTTP/1.1" 404 1876然后如果不需要,你可以省略對這個文件的引用,或者找到添加它的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM