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


298

를 변경하면 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',
)

예, 내 템플릿 디렉토리에 403 & 404 500 html 파일을 추가했습니다
zhiguo.wang

500.html 및 404.html 및 403.html 파일이 있습니까? 템플릿 디렉토리의 루트에 해당 파일이없는 배포 된 프로젝트에 문제가 있다고 생각합니다.
esse

사이트에서 500 오류가 발생하는 경우 아파치 로그에 일부 정보가 있어야하며, 사람들이 볼 수 있도록 오류 로그 파일의 끝 부분을 지나칠 수 있습니다.
esse

87
공개적으로 사용 가능하도록 SECRET_KEY를 변경하고 싶을 수도 있습니다.
Fraxtil

1
이것은 모두에게 답이 아닙니다. stackoverflow.com/a/37218484/4028977 에서 아래에 표시된대로 에서 이것이 발생하는 이유는 여러 가지가있을 수 있습니다. 간단한 로깅으로 추측없이 찾을 수 있습니다.
Rob

답변:


413

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']또는 ['*']빠른 테스트를 위해 호스트를 추가 하지만 ['*']프로덕션 에는 사용하지 마십시오 .


32
와우-이것은 우리를 힘들게한다. 이 설정이 문서에 묻혀 있다는 것은 정말 짜증납니다. 우리의 프로덕션 사이트는 DEBUG = False와 함께 작동하지 않습니다. 이것을 지적 해 주셔서 감사합니다 !!!
shreddd

4
:이 설정을 도입 보안 문제에 대한 자세한 실용 HTTP 호스트 헤더 공격 . ['*']생산 에 사용하지 말 것을 확실히 확신합니다 .
gertvdijk

4
bl. 그것들은 settings.py의 기본값으로 그것을 고수하지 않는다는 것을 성가 시게한다. 아마도 설명 주석이있을 것이다.
hwjp

7
가끔 장고가 점점 지체되는 이유가 궁금합니다! Surelly는 저보다 훨씬 뛰어난 프로그래머이지만, 실제적이고 깔끔한 이동이 서버를 올바르게 구성하는 경우 응용 프로그램 수준에서 취약점을 "수정"하려는 결정을 이해하지 못합니다. "템플릿 캐싱"과 "지속적인 연결"도 마찬가지입니다. 심각한 웹 사이트에서는 절대 사용되지 않는 쓸모없는 코드입니다. 여전히 프로그래밍의 성배로 제시됩니다! 어쩌면 나일지도 모른다, 나는 전에 틀렸다.
StefanNch

3
신경 쓰지 마라, 문제를 발견했다. django-pipeline정적이 아직 수집되지 않은 경우의 동작 과 관련이 있습니다. 일반적인 팁으로 Django의 handle_uncaught_exception방법에 중단 점을 배치하면 여기서 무슨 일이 일어나고 있는지 파악하는 데 도움이됩니다.
Pieter

51

나는 이것이 늦었다는 것을 알고 있지만 여기에 내 오류 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',
        },
    }
}

16
이것은 정답입니다. 프로덕션 설정을 사용한 후 추측하지 않고 프레임 워크 자체에 무엇이 문제인지 간단히 묻는 것이 훨씬 유용합니다.
Stefan Dragnev

4
실제로, 이것은 어둠 속에서 돌아 다니는 것이 아닙니다. 이 방법을 사용하면 일반적으로 표시되는 오류 메시지를 살펴보십시오. 내 경우에는 내 앱에서 찾고있는 settings.py에서 다른 설정이 누락되었습니다. 내가 필요한 것은 이것을 추적하는 로그였습니다. 한 가지 중요한 참고 사항 : docs 예제에 표시된 것처럼 'mysite.log'앞에 / path / to / my / django /를 추가했습니다. docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
나는 해결책을 찾기 위해 몇 시간을 보냈다. 이 답변에 따르면 로깅을 사용하면 문제가 발생합니다. 이것이 최선의 대답입니다. 감사합니다 OP!
Stack

내 서버 오류가 로그를 생성하지 않는 것 같습니다! 다양한 로깅 구성을 사용해 보았습니다. 어떤 아이디어?
cammil

5
감사합니다! 이것은 내 오류를 해결했습니다. 패키지에서 일부 정적 자산을 수집하기 위해 collectstatic을 실행해야하는 것으로 나타났습니다.
themessup

33

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.


나는 똑같은 일을하지만 collectstatic은 나를 위해 고치지 않았다. "도달 할 수 없습니다"오류가 발생 했습니까? 이 경우 어떻게 고쳤습니까?
Kavi Vaidya

23

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

그 범인? django_compressor

나는했다

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

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

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

고마워 그것이 나를 위해 작동하지 않은 이유이지만, 그 라인이 django_compressor가 작업을 수행하지 못하게하지 않습니까?
Fanckush

1
@Fanckush Nope. 아무런 해가 없습니다. django-compressor.readthedocs.io/en/latest/settings/… 컴프레서는 여전히 완벽하게 작동합니다! 모든 스태틱 (css와 같은)을 간단히 압축하면 애셋이 이미 압축되어 있으므로 설정을 사용할 수 없습니다.
KhoPhi

13

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

ALLOWED_HOSTS = ['localhost']

어떤 이유로 든 'localhost'를 사용하면 효과가 없었습니다. 대신 IP '127.0.0.1'을 사용해야했습니다. 당신이 놀라고 작동하기를 원한다면 나는 또한 '*'를 사용할 수있었습니다. 그러나 프로덕션 환경에서는 그렇게하지 않는 것이 좋습니다. Django
1.4.20을

11

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


3
reverse와 url 태그 만 사용하면 괜찮을 것입니다
maazza

설정 DEBUG=False은 가져 오기 오류도 공개 할 수 있습니다 : stackoverflow.com/questions/25676453/…
ecoe

js 및 css 자산에 대한 링크조차?
amchugh89

@ amchugh89 : 아니, 그냥 "장고"URL
webzy

1
내 문제는 whitenoise가 일부 이미지를 찾을 수 없어 ValueError를 던지고 있다는 것입니다. 나는 또한 그것을 찾을 수 없었지만 그것을 찾지 말라고 whitenoise에게 말하는 방법을 몰랐다. 그래서 whitenoise를 끄고 django 정적 서브를 사용하면 이제 prod에서 debug = False를 실행할 수 있습니다. 분명히 이상적이지 않음 :(
amchugh89

7

나는 모두에게 재미있는 이야기가 있습니다. 이 페이지에 도달 한 후 나는 "유레카! 나는 구원을 받았다. 그것은 나의 문제 여야한다"고 말했다. 그래서 필요한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에 기본값이 설명 설명과 함께 있음을 알지 못했습니다. 모니터에서 보이지 않게 입장을 마치는 곳의 아래에있었습니다. 물론 목록은 비어있었습니다. 따라서 시간 낭비.


1
나는 이것을 발견 한 후에 만 ​​재미가되었다는 것을 제외하고는 정확히 똑같은 재미있는 패턴을 가졌습니다. 감사합니다. 그 전에는 그냥 실망했다
binithb

이 모든 것에서 도움이되는 것은 local_settings.py각 환경에 대해 를 사용한 다음에 가져 오는 것입니다 settings.py.
nicorellius

1
내가하고 싶은 것은 설정이 있습니다 / 대신 디렉토리 . 이 디렉토리에는 환경에 따라 별도의 .py 파일을, 일반 설정에는 base.py를 사용할 수 있습니다. 그런 다음 프로덕션 설정은 기본 설정에서 *를 가져 와서 시작할 수 있으며 재정의해야하는 모든 항목 만 재정의 할 수 있습니다. 또한 필요한 init .py 파일은 해당 설정 / 디렉토리를 유효한 모듈로 바꾸고, 먼저 base.py에서 가져온 다음 local.py (로컬에만 존재 함)에서 가져 오려고 시도해야합니다. 즉, 로컬 설정을 수동으로 지정할 필요가 없습니다.
mephisto

7

주요 답변 보완 개발과 생산 사이를 전환 할 때
ALLOWED_HOSTS 및 DEBUG 전역 상수를 변경하는 것은 성가신 일입니다 settings.py. 이 코드를 사용하여 이러한 설정을 자동으로 설정하고 있습니다.

import socket

if socket.gethostname() == "server_name":
    DEBUG = False
    ALLOWED_HOSTS = [".your_domain_name.com",]
    ...
else:
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
    ...

macOS를 사용하면보다 일반적인 코드를 작성할 수 있습니다.

if socket.gethostname().endswith(".local"): # True in your local computer
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
else:
    ...

6

그만한 가치가 있기 때문에 DEBUG = False일부 페이지에서만 500을 얻었습니다 . pdb로 예외를 추적하면 누락 된 자산이 발견되었습니다 ( {% static ... %}템플릿 태그가 500의 범인이라고 생각합니다 .


1
이것은 또한 내 문제였습니다. 맞춤형 404 페이지에서 참조하는 기본 템플릿은 정적 태그를 사용했지만 맨 위에 {% load static %}를 포함하지 않았습니다. 다른 템플릿에는이 줄이 있었기 때문에 다른 곳에서는 눈치 채지 못했지만 모든 곳에서 정적 파일을 참조하기 때문에 어쨌든베이스에 넣는 것이 좋습니다.
krischan

2
동일한 솔루션이 있습니다- static존재하지 않는 CSS 파일을 포함시키는 데 사용 했습니다.
Phil Gyford

5

내가했을 때 같은 문제에 직면했다 DEBUG = FALSE . 위의 답변과 다른 게시물에 흩어져있는 통합 솔루션이 있습니다.

기본적으로 settings.py에는가 있습니다 ALLOWED_HOSTS = []. ALLOWED_HOSTS오류를 제거하기 위해 시나리오별로 가치 를 변경해야 할 수있는 사항은 다음과 같습니다 .

1 : 도메인 이름 :

ALLOWED_HOSTS = ['www.example.com'] # Your domain name here

2 : 아직 도메인 이름이없는 경우 배포 된 서버 IP (내 경우에는 매력처럼 작동 함) :

ALLOWED_HOSTS = ['123.123.198.123'] # Enter your IP here

3 : 로컬 서버에서 테스트하는 경우 settings.py또는 다음 settings_local.py과 같이 편집 할 수 있습니다 .

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4 : ALLOWED_HOSTS값으로 '*'를 제공 할 수 있지만 보안상의 이유로 프로덕션 환경에서는 권장되지 않습니다 .

ALLOWED_HOSTS = ['*'] # Not recommended in production environment

또한 내 블로그 에 참조 할 수 있는 자세한 솔루션을 게시했습니다 .


5

ALLOWED_HOSTS가 유일한 문제는 아닙니다. 저는 404.html을 만들어 템플릿의 기본 수준 (앱 수준이 아님)에 넣어야했습니다. 또한 404보기를 만들고 404handler URL을 추가 할 수는 있지만 그렇게 생각합니다. 선택 과목. 404.html 수정

mainproject.urls에서

handler404 = 'app.views.custom_404'

app.views에서

def custom_404(request):
    return render(request, '404.html', {}, status=404)

그런 다음 templates / 404.html 템플릿을 만듭니다.

찾을 수없는 다른 S / O 게시물에서 이것을 얻었습니다.

편집하다

또한 화이트 노이즈가있는 자산을 제공 할 때 500 개의 오류가 발생합니다. 내 인생에서 오류를 알 수 없었습니다. 오류는 whitenoise의 ValueError이기도합니다. 찾을 수없는 자산을 찾을 수 없으며 현재 기본 장고와 함께 가야했습니다.


8
나는 whitenoise와 같은 문제가 있었다. python manage.py collectstatic고쳤다.
Eugene Pakhomov

1
@ amchungh89 당신은 생명의 은인입니다! 지적 해 주셔서 감사합니다.
Deepak Sharma

5

나는이 문제에 대해 더 많이 검색하고 테스트했으며 settings.py에 지정된 정적 파일 디렉토리가 원인 일 수 있음을 깨달았습니다. 그래서 우리는이 명령을 실행해야합니다

python manage.py collectstatic

settings.py에서 코드는 다음과 같아야합니다.

STATIC_URL = '/static/'

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

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

3

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 다른 도움을 줄 수 있습니다. DEBUG = False를 설정 한 후 500 오류가 발생하면 명령 줄에서 항상 manage.py runserver를 실행하여 웹 오류 로그에 표시되지 않는 오류를 확인할 수 있습니다.


2

2019 년 중반에 장고로 몇 년 동안 개발 한 후이 오류에 직면했습니다. 밤새도록 당황했다! 호스트를 허용하지 않았고 (400을 던져야 함) 다른 모든 체크 아웃은 마침내 일부 오류 로깅을 수행하여 누락되거나 엉망이 된 정적 파일 (정적 후)이 설정과 관련이 있음을 발견했습니다. 간결하게 말하면, 혼란에 빠진 사람들은 화이트 노이즈 또는 CACHE (manfest 정적 파일)를 사용하는 장고 정적 파일 백엔드를 사용하고 있습니다.

  1. 화이트 노이즈 백엔드에서와 같이 모든 것을 설정했는지 확인하십시오 (django 백엔드는 그럼에도 불구하고 읽습니다) http://whitenoise.evans.io/en/stable/django.html

  2. 오류 코드 500이 계속 표시되면 설정에 유의하십시오 .STATICFILES_STORAGE.

압축으로 whitenoise 백엔드의 경우로 설정하십시오.

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

또는 (장고 기본값으로 두십시오)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

대체로, 문제는이 화이트 노이즈 캐시 + 압축 백엔드->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

또는 django의 자체 캐싱 백엔드->

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

... CSS는 collectstatic / backend 캐싱 중에 혼합 될 수있는 다른 소스를 참조했기 때문에 꽤 잘 작동했습니다. 이 문제는 http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot 에서도 잠재적으로 강조 표시됩니다 .


1

http 서버 설정 일 수도 있다고 생각합니다. 광산은 여전히 ​​망가졌고 내내 ALLOWED_HOSTS을했습니다. 로컬로 액세스 할 수 있지만 (gunicorn 사용) DEBUG = False 인 경우 도메인 이름을 통해 액세스 할 수 없습니다. 도메인 이름을 사용하려고하면 오류가 발생하므로 nginx 관련 문제로 생각합니다.

다음은 nginx의 conf 파일입니다.

server {
    listen   80;
    server_name localhost myproject.ca www.myproject.ca;
    root /var/web/myproject/deli_cms;

    # serve directly - analogous for static/staticfiles
    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /var/web/myproject/lib/python2.6/site-packages/django/contrib;
    }
    location /static/ {
    alias /var/web/myproject/deli_cms/static_root/;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;
}

내 gunicorn 설정 파일은 다음과 같습니다 : #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi : application
user2868304

내 문제는 이제 해결되었으며 gunicorn_django 스크립트를 사용하고 더 이상 사용되지 않는 메시지를 표시했습니다. 왜 로컬에서 작동했는지 확실하지 않고 내 nginx 구성을 변경하지 않았으므로 gunicorn을 사용하고 대신 wsgi : application 모듈을 사용하도록 이전 스크립트를 변경하면 다시 작동합니다. Gunicorn은 이전에 일부 사용 중단 메시지를 던졌지 만 내 문제와 관련이 없습니다.
user2868304

1

비슷한 문제가 있습니다. 제 경우에는 body 태그 안에 주석 처리 된 스크립트가있어서 발생했습니다.

<!--<script>  </script>-->

1

나는이 문제에 부딪쳤다. 내가 템플릿을 사용하여 포함 된 것으로 나타났습니다.static더 이상 존재하지 않는 파일 인 템플릿 태그를 템플릿 . 로그를 보면 문제가 있음을 알 수 있습니다.

나는 이것이 이런 종류의 오류에 대한 많은 가능한 이유 중 하나 일 것이라고 생각합니다.

이야기의 도덕 : 항상 오류를 기록하고 항상 로그를 확인하십시오.


1

@squarebear 덕분에 로그 파일에서 오류가 발견되었습니다 ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

내 장고 앱에 몇 가지 문제가있었습니다.
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'heroku의 문서에서 찾은 줄 을 제거했습니다 .

또한 (덕분에 별도의 디렉토리를 추가했다 다른 SO 응답 ) static로 장고 응용 프로그램의 루트에 myapp/static나는 그것을 사용하지 않을에도 불구하고. 그런 다음 python manage.py collectstatic서버를 실행하기 전에 명령 을 실행하면 문제가 해결되었습니다. 마침내, 그것은 잘 작동하기 시작했습니다.


이것이 원래 질문에 어떻게 대답합니까?
Nick

1

나는 500의 형태로 debug = False를 얻기 시작했습니다.

django.urls.exceptions.NoReverseMatch: Reverse for 'home' not found.
or...
django.urls.exceptions.NoReverseMatch: Reverse for 'about' not found.

상승 할 때 django.core.exceptions.ValidationError을 대신 양육의 rest_framework.serializers.ValidationError를

공평하게, 그것은 이미 500을 제기했지만 debug = False 인 ValidationError로 NoReverseMatch로 변경되었습니다.


1

이것은 아마도 다른 사람에게 도움이 될 것입니다. 제 경우에는 파비콘이 누락 된 문제입니다.


0

나는 이것이 오래된 질문이라는 것을 알고 있지만 DEBUG = False 일 때 500 오류가 발생했습니다. 몇 시간 후, 나는 base.html의 일부 링크를 슬래시로 끝내는 것을 잊었다는 것을 깨달았습니다.


CSS와 JS도?
amchugh89

0

이것은 오래되었으며 내 문제는 문제와 관련이 있었지만 OP와는 관련이 없지만 위의 시도는 아무 소용이없는 사람을위한 것입니다.

Django의 수정 된 버전에서 DEBUG가 꺼져있을 때만 실행되는 CSS 및 JS 파일을 최소화하도록 설정했습니다. 내 서버에 CSS 축소 기가 설치되어 있지 않아 오류가 발생했습니다. Django-Mako-Plus를 사용하는 경우 이것이 문제 일 수 있습니다.


0

참고로 한 가지 작은 점은 배열에 None이 있으면 이후에 허용되는 모든 호스트가 무시됩니다.

ALLOWED_HOSTS = [
    "localhost",
    None,
    'example.com', # First DNS alias (set up in the app)
    #'www.example.com', # Second DNS alias (set up in the app)
]

Django version 1.8.4


0

파티에 조금 늦었고 물론 다른 문제가있을 수는 있지만 비슷한 문제가 발생하여 HTML 비고 안에 {% %} 특수 문자가있는 것으로 나타났습니다 ...

<!-- <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/> -->

0

debug = false에서 500 오류가 발생했지만 debug = true에서 작동하는 한 가지 견해가 있습니다. 이런 종류의 물건을 가지고 있고 허용 호스트에 문제가없는 사람에게는 잘못된 위치를 가리키는 템플릿의 정적 태그를 업데이트하여 내 견해를 수정했습니다.

따라서 링크와 태그를 확인하는 것은 사용 된 모든 템플릿에서 기밀 한 것입니다. 어쩌면 디버그에서 그물을 통해 미끄러지지 만 생산에는 오류가 발생할 수 있습니다.


0

DEBUG = False 일 때 500 오류의 또 다른 원인을 찾았습니다. Django compressor유틸리티를 사용하고 프론트 엔드 엔지니어 가 Django 템플릿 의 블록 내부 에서 글꼴 파일에 대한 참조를 추가했습니다 compress css. 이처럼 :

{% compress css %}
    <link href="{% static "css/bootstrap.css" %}" rel="stylesheet">
    <link href="{% static "css/bootstrap-spinedit.css" %}" rel="stylesheet">
    <link href="{% static "djangular/css/styles.css" %}" rel="stylesheet">
    <link href="{% static "fonts/fontawesome-webfont.ttf" %}" rel="stylesheet">
{% endcompress %}

해결책은 링크를 ttf파일 아래로 endcompress줄 아래 로 이동하는 것이 었습니다 .


0

나는 이것과 비슷한 문제가 있었고 누군가도 같은 경험을 할 수 있기 때문에 어떻게 내 문제를 해결했는지보고 할 것입니다.

제 경우에는 서버가 홈페이지에서 일부 정적 파일을 찾지 못해 오류가 발생했습니다.

따라서 오류가 index 가 다른 페이지 하거나 다른 페이지 하십시오. 인덱스에서만 문제가 발생하면 정적 파일을 확인해야합니다. Chrome 미리보기 콘솔을 열고 오류를 확인하는 것이 좋습니다.

필자의 경우 서버에서 favicon.ico두 개의 다른 CSS를 찾을 수 없습니다 .

이 문제를 해결하기 위해 통과 python manage.py collectstatic했고 효과가있었습니다.


0

이 게시물은 상당히 오래되었지만 오늘날에도 여전히 완벽하게 관련되어 있습니다.

그만한 가치가 있기 때문에- DEBUG = False내 사이트의 모든 페이지에 대해 500을 얻었습니다 .

디버그 할 때 역 추적이 없습니다.

내 사이트 내 템플릿에있는 모든 정적 링크를 거쳐 이미지 소스 앞에서 하나 (슬래시)를 찾았습니다. {% 정적 ... %}. 이로 인해 500 오류가 발생 DEBUG = False했지만 Debug = True오류없이 완벽하게 작동했습니다 . 매우 성가신! 경고 받다! 슬래시로 인해 많은 시간이 낭비되었습니다 ...


0

및 에 python manage.py collectstatic설정 한 후 실행하려고 할 수 있습니다 . 이 두 단계 후에 DEBUG = False 모드를 사용하더라도 내 웹 응용 프로그램이 로컬 서버에서 제대로 실행되었습니다.DEBUG = FalseALLOWED_HOSTS = ['127.0.0.1']settings.py

BTW에이 설정이 settings.py있습니다.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # what i added
    'django.middleware.common.CommonMiddleware', # and so on...
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

whitenoise 설정이 collectstatic 명령과 관련이 있다고 가정합니다.


-3

수 많은 것들을 시도한 후에 올바른 해결책은 ...

당신은 설정할 필요가 DEBUG = 'FALSE'없습니다 False거나 FALSE하지만, 'FALSE'''


'FALSE'는 문자열이므로 True와 같으므로 오류가 발생하지 않습니다.
apet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.