[django] DEBUG = False로 설정하면 500 오류가 발생합니다

를 변경하면 DEBUG = False내 사이트는 500을 생성하고 (wsgi & manage.py runserver 사용) Apache 오류 로그에 오류 정보가 없으며로 변경 debug하면 정상적으로 실행됩니다 True.

Django 1.5 및 Python 2.7.3을 사용하고 있습니다. 아파치 액세스 로그이며 아파치 오류 로그에 로그가 없습니다.

www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET / HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"

내 설정 파일은 다음과 같습니다.

import os.path
DEBUG = False
#TEMPLATE_DEBUG = DEBUG

HERE = os.path.dirname(__file__)
ADMINS = (
    ('admin', 'xyzadmin@qq.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'zdm',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'passwd',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
S= os.path.join(HERE, 'static').replace('\\','/')

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '9a7!^gp8ojyk-^^d@*whuw!0rml+r+uaie4ur$(do9zz_6!hy0'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'zdm.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'zdm.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'zdm',
    'portal',
    'admin',
    'tagging',
)



답변

Django 1.5에는 보안상의 이유로 허용되는 호스트 설정 이 도입되었습니다 . Django 1.5로 만든 설정 파일에는 다음과 같은 새로운 섹션이 추가되었습니다.

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.9/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

여기에 ['www.beta800.net']또는 ['*']빠른 테스트를 위해 호스트를 추가 하지만 ['*']프로덕션 에는 사용하지 마십시오 .


답변

나는 이것이 늦었다는 것을 알고 있지만 여기에 내 오류 500을 검색하여 끝났다 DEBUG=False. 내 경우에는 것으로 밝혀 ALLOWED_HOSTS졌지만 os.environ.get('variable')호스트를 채우는 데 사용 하고 있었지만 로깅을 활성화 할 때까지 이것을 알지 못했다. 다음과 같이 파일에 모든 오류를 기록하면 다음과 같은 경우에도 기록됩니다 DEBUG=False.

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'mysite.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers':['file'],
            'propagate': True,
            'level':'DEBUG',
        },
        'MYAPP': {
            'handlers': ['file'],
            'level': 'DEBUG',
        },
    }
}


답변

Django 2.0에서 최근에 같은 문제가 발생했습니다. 설정하여 문제를 파악할 수있었습니다 DEBUG_PROPAGATE_EXCEPTIONS = True. 여기를 참조하십시오 : https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

제 경우에는 오류가 ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'입니다. 로컬로 실행하여 문제를 해결했습니다 python manage.py collectstatic.


답변

제 경우에는 타사 앱 문서를 읽으면 저를 구했습니다.

그 범인? django_compressor

나는했다

{% load compress %}
{% compress css %}
 ... css files linked here ..
{% endcompress %}

DEBUG = True 문제를 해결하려면 설정에 줄이 필요했습니다.

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)


답변

Django 1.5에서 DEBUG = False이면 포트 번호가없는 도메인을 추가하여 ALLOWED_HOSTS를 구성하십시오. 예:

ALLOWED_HOSTS = ['localhost']


답변

또한 모든 곳에서 URL을 확인해야합니다. DEBUG로 설정 하면 False후행 /이 없는 모든 URL 은 사용자와 달리 버그로 취급됩니다. DEBUG = True이 경우 Django /는 누락 된 모든 위치에 추가 합니다. 즉, 모든 링크가 어디에서나 슬래시로 끝나는 지 확인하십시오.


답변

나는 모두에게 재미있는 이야기가 있습니다. 이 페이지에 도달 한 후 나는 “유레카! 나는 구원을 받았다. 그것은 나의 문제 여야한다”고 말했다. 그래서 필요한ALLOWED_HOSTS 목록을 setting.py에 … 아무것도 없습니다. 이전 500 오류와 동일합니다. 그리고 아닙니다. 404.html 파일이 부족하지 않았습니다.

그래서 2 일 동안 나는 정적 파일을 제공하는 것과 관련이있는 것과 같은 야생 이론으로 나 자신을 바꿨습니다 (나는 멍청한 놈이며 그들이하는 일을 모른다는 것을 이해합니다).

그래서 무엇입니까? 이제 우리는 유용한 팁을 얻는 것이 중재자 Mr. 내 개발 Django는 버전 1.5.something, 내 프로덕션 서버 버전은 1.5.something + 1 … 또는 플러스 2입니다. 그래서 ALLOWED_HOSTS데스크톱 버전의 settings.py 에를 추가 한 후 에 hwjp가 요청한 것 ( “settings.py의 기본값, 아마도 설명 주석이 포함 된”)이없는 프로덕션 서버에서 동일한 작업을 수행했습니다. 적절한 도메인.

그러나 이후 버전의 Django가있는 프로덕션 서버에는 settings.py에 기본값이 설명 설명과 함께 있음을 알지 못했습니다. 모니터에서 보이지 않게 입장을 마치는 곳의 아래에있었습니다. 물론 목록은 비어있었습니다. 따라서 시간 낭비.