Raz zmienić DEBUG = False
, moja strona będzie generować 500 (przy użyciu WSGI & manage.py runserver), a nie ma informacji o błędzie w dzienniku błędów Apache i to będzie działać normalnie, kiedy zmieni debug
się True
.
Używam Django 1.5 i Python 2.7.3 tutaj jest dziennik dostępu Apache i bez żadnego dziennika błędów dziennika Apache
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"
Oto mój plik ustawień:
import os.path
DEBUG = False
#TEMPLATE_DEBUG = DEBUG
HERE = os.path.dirname(__file__)
ADMINS = (
('admin', '[email protected]'),
)
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
settings
django-1.5
zhiguo.wang
źródło
źródło
Odpowiedzi:
Django 1.5 wprowadziło ustawienie dozwolonych hostów, które jest wymagane ze względów bezpieczeństwa. Plik ustawień utworzony za pomocą Django 1.5 zawiera nową sekcję, którą należy dodać:
Dodaj tutaj swojego hosta, tak jak
['www.beta800.net']
lub['*']
do szybkiego testu, ale nie używaj go['*']
do produkcji .źródło
['*']
w produkcji.django-pipeline
zachowaniem, gdy ładunek statyczny nie został jeszcze zebrany. Ogólna wskazówka: umieszczenie punktu przerwania w metodzie Djangohandle_uncaught_exception
pomoże ci dowiedzieć się, co się tutaj dzieje.Wiem, że to jest późno, ale skończyło się na tym, że szukałem błędu 500
DEBUG=False
, w moim przypadku okazało się,ALLOWED_HOSTS
ale użyłemos.environ.get('variable')
do zapełnienia hostów, nie zauważyłem tego, dopóki nie włączyłem logowania, możesz zaloguj wszystkie błędy do pliku poniżej, a loguje się nawet, gdyDEBUG=False
:źródło
Ostatnio spotkałem ten sam problem w Django 2.0. Ustawiłem problem
DEBUG_PROPAGATE_EXCEPTIONS = True
. Zobacz tutaj: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptionsW moim przypadku błąd był
ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'
. Naprawiłem to, uruchamiając lokalniepython manage.py collectstatic
.źródło
W moim przypadku czytanie dokumentów aplikacji innych firm właściwie mnie uratowało.
Sprawca? django_compressor
miałem
DEBUG = True
zawsze dawał mi 500. Aby to naprawić, potrzebowałem linii w moich ustawieniach, aby ją uruchomićźródło
Tak, w Django 1.5, jeśli DEBUG = False, skonfiguruj ALLOWED_HOSTS, dodając domeny bez numeru portu. przykład:
źródło
Musisz także sprawdzić adresy URL w całym miejscu. Kiedy
DEBUG
jest ustawiony naFalse
, wszystkie URL-e bez końca/
są traktowane jako błąd, w przeciwieństwie do twojegoDEBUG = True
, w którym to przypadku Django dołącza się/
wszędzie tam, gdzie go brakuje. Krótko mówiąc, upewnij się, że wszystkie linki kończą się ukośnikiem WSZĘDZIE.źródło
DEBUG=False
może również ujawnić błędy importu: stackoverflow.com/questions/25676453/…Mam zabawną historię dla wszystkich. Po wejściu na tę stronę powiedziałem „Eureka! Jestem uratowany. To MUSI być mój problem”. Wstawiłem więc wymaganą
ALLOWED_HOSTS
listę do pliku setting.py i ... nic. Ten sam stary błąd 500. I nie, to nie był brak pliku 404.html.Więc przez 2 dni zajmowałem się dzikimi teoriami, na przykład, że miało to coś wspólnego z serwowaniem plików statycznych (rozumiem, że jestem noobem i noobowie nie wiedzą, co robią).
Co to było? Teraz to moderator dochodzi do użytecznej wskazówki. Podczas gdy mój program Django to wersja 1.5. Coś, moja wersja serwera produkcyjnego to 1.5. Coś + 1 ... lub może plus 2. Cokolwiek. I tak po dodaniu
ALLOWED_HOSTS
do desktopowej wersji pliku settings.py , w którym brakowało tego, o co prosił hwjp --- „domyślna wartość w settings.py, być może z komentarzem wyjaśniającym” --- zrobiłem to samo na serwerze produkcyjnym z właściwa do tego domena.Ale nie zauważyłem, że na serwerze produkcyjnym z późniejszą wersją Django była domyślna wartość w settings.py z komentarzem wyjaśniającym. Było to znacznie poniżej miejsca, w którym dokonałem wpisu, poza zasięgiem wzroku na monitorze. I oczywiście lista była pusta. Stąd moja strata czasu.
źródło
local_settings.py
dla każdego środowiska, a następnie zaimportowaćsettings.py
.Uzupełnienie głównej odpowiedzi
Irytujące jest zmienianie globalnych stałych ALLOWED_HOSTS i DEBUG
settings.py
przy przełączaniu między rozwojem a produkcją. Używam tego kodu, aby automatycznie ustawić te ustawienia:Jeśli używasz macOS, możesz napisać bardziej ogólny kod:
źródło
Za to, co jest warte - dostawałem 500 z tylko
DEBUG = False
na niektórych stronach. Śledzenie wyjątku za pomocą pdb ujawniło brakujący zasób (podejrzewam,{% static ... %}
że winowajcą szablonu był winowajca 500).źródło
static
aby dołączyć plik CSS, który nie istniał.Kiedy to zrobiłem, napotkałem ten sam problem
DEBUG = FALSE
. Oto skonsolidowane rozwiązanie przedstawione w powyższych odpowiedziach i innych postach.Domyślnie w settings.py mamy
ALLOWED_HOSTS = []
. Oto możliwe zmiany, które należy wprowadzićALLOWED_HOSTS
według scenariusza, aby pozbyć się błędu:1: Twoja nazwa domeny:
2: Twój wdrożony adres IP serwera, jeśli nie masz jeszcze nazwy domeny (co było moim przypadkiem i działało jak urok):
3: Jeśli testujesz na serwerze lokalnym, możesz edytować swój
settings.py
lubsettings_local.py
jako:4: Możesz również podać „*” w
ALLOWED_HOSTS
wartości, ale nie jest to zalecane w środowisku produkcyjnym ze względów bezpieczeństwa:Na moim blogu zamieściłem również szczegółowe rozwiązanie, które możesz polecić.
źródło
ALLOWED_HOSTS NIE jest jedynym problemem, dla mnie musiałem zrobić plik 404.html i umieścić go na poziomie podstawowym moich szablonów (nie na poziomie aplikacji) - Możesz także zrobić widok 404 i dodać adres URL modułu obsługi 404, ale myślę, że tak opcjonalny. 404.html to naprawiło
w mainproject.urls
w app.views
następnie zrób szablon / 404.html szablon
otrzymałem to z innego postu S / O, że nie mogę go znaleźć
EDYTOWAĆ
dostaję również 500 błędów, gdy obsługuję zasoby za pomocą whitenoise. Nie mogłem zrozumieć, że przez całe życie mój błąd polegał na tym, że błąd ValueError spowodowany przez whitenoise nie mogąc znaleźć zasobu, którego ja również nie mogłem znaleźć, musiał na razie przejść z domyślnym serwerem django
źródło
python manage.py collectstatic
naprawione.Szukałem i testowałem więcej na temat tego problemu i zdałem sobie sprawę, że przyczyną mogą być katalogi plików statycznych określone w pliku settings.py, więc najpierw musimy uruchomić to polecenie
w settings.py kod powinien wyglądać mniej więcej tak:
źródło
Wiem, że to bardzo stare pytanie, ale może mógłbym pomóc komuś innemu. Jeśli masz błąd 500 po ustawieniu DEBUG = False, zawsze możesz uruchomić manage.py runserver w wierszu poleceń, aby zobaczyć błędy, które nie pojawią się w żadnych internetowych dziennikach błędów.
źródło
Jest połowa 2019 roku i napotkałem ten błąd po kilku latach pracy z Django. Zaskoczyło mnie przez całą noc! Niedozwolony host (który powinien wyrzucić 400), wszystko inne wyewidencjonowane, w końcu wykonał pewne rejestrowanie błędów tylko po to, aby odkryć, że niektóre brakujące / lub pomieszane pliki statyczne (po collectstatic) psują się podczas instalacji. Krótko mówiąc, dla tych, którzy są zakłopotani I TAK SIĘ SZCZĘŚLIWIE WYKORZYSTUJĄ BIAŁE LUB BACKEND STATYSTYCZNY DJANGO Z DACHEM (manifest plików statycznych), może to jest dla Ciebie.
Upewnij się, że wszystko skonfigurowałeś (tak jak ja zrobiłem dla backendu whitenoise ... backendy django czytaj dalej) http://whitenoise.evans.io/en/stable/django.html
Jeśli kod błędu 500 nadal Cię strzela, zwróć uwagę na swoje ustawienia.STATICFILES_STORAGE.
Ustaw na oba (dla backendu whitenoise z kompresją)
lub (pozostaw jako domyślny django)
Podsumowując, PROBLEM wydawał się wynikać z faktu, że ta pamięć podręczna whitenoise + backend kompresji ->
lub własny backend buforowania django ->
... nie działało mi dobrze, ponieważ mój css odwoływał się do innych źródeł, które mogą być pomieszane podczas buforowania collectstatic / backend. Ten problem jest również potencjalnie podkreślony w http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot
źródło
Myślę, że mogą to być również ustawienia serwera http. Mój jest nadal zepsuty i miał ALLOWED_HOSTS przez cały czas. Mogę uzyskać do niego dostęp lokalnie (używam gunicorn), ale nie przez nazwę domeny, gdy DEBUG = False. kiedy próbuję użyć nazwy domeny, wtedy pojawia się błąd, więc myślę, że to problem związany z Nginx.
Oto mój plik conf dla nginx:
źródło
Mam podobny problem, w moim przypadku było to spowodowane umieszczeniem skomentowanego skryptu wewnątrz tagu body.
źródło
Natknąłem się na ten problem. Okazuje się, że dołączałem do szablonu, używając
static
tagu szablonu, pliku, który już nie istniał. Spojrzenie w dzienniki pokazało mi problem.Myślę, że to tylko jedna z wielu możliwych przyczyn tego rodzaju błędu.
Morał tej historii: zawsze loguj błędy i zawsze sprawdzaj logi.
źródło
Dzięki @squarebear, w pliku dziennika, znalazłem błąd:
ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>
.Miałem kilka problemów z aplikacją django.
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
Usunąłem wiersz, który znalazłem z dokumentacji heroku.Musiałem także dodać dodatkowy katalog (dzięki kolejnej odpowiedzi SO )
static
w katalogu głównym aplikacji django,myapp/static
mimo że go nie używałem. Następnie uruchomienie poleceniapython manage.py collectstatic
przed uruchomieniem serwera rozwiązało problem. Wreszcie zaczęło działać dobrze.źródło
Zacząłem dostawać 500 za debugowanie = Fałsz w postaci
podczas podnoszenia django.core.exceptions.ValidationError zamiast podnoszenia rest_framework.serializers.ValidationError
Szczerze mówiąc, już wcześniej zbierał 500, ale jako ValidationError, z debug = False, zmieniło się to w NoReverseMatch.
źródło
to może pomóc komuś innemu, w moim przypadku problem z brakującym faviconem.
źródło
Wiem, że to stare pytanie, ale dostałem również błąd 500, gdy DEBUG = False. Po kilku godzinach zdałem sobie sprawę, że zapomniałem zakończyć niektóre linki w pliku base.html końcowym ukośnikiem.
źródło
To jest stare, a mój problem jest związany z problemem, ale nie dotyczy OP, ale moje rozwiązanie jest dla każdego, kto spróbowałby powyższego bezskutecznie.
Miałem ustawienie w zmodyfikowanej wersji Django, aby zminimalizować pliki CSS i JS, które działały tylko wtedy, gdy DEBUG był wyłączony. Mój serwer nie ma zainstalowanego minimalizatora CSS i zgłosił błąd. Jeśli używasz Django-Mako-Plus, może to być twój problem.
źródło
Należy zwrócić uwagę na jedną małą rzecz: jeśli w tablicy nie ma wartości None, wszystkie kolejne dozwolone hosty są ignorowane.
Django version 1.8.4
źródło
Trochę późno na imprezę i oczywiście może istnieć legion problemów, ale miałem podobny problem i okazało się, że miałem {%%} znaków specjalnych w mojej uwadze HTML ...
źródło
Miałem jeden widok, który zgłosił błąd 500 w debug = false, ale działał w debug = true. Dla każdego, kto dostaje coś takiego i Dozwolone hosty nie stanowią problemu, naprawiłem mój widok, aktualizując statyczny tag szablonu, który wskazywał niewłaściwą lokalizację.
Sugeruję więc po prostu sprawdzenie, czy linki i tagi są szczelne w każdym używanym szablonie, być może pewne rzeczy prześlizgują się przez sieć podczas debugowania, ale powodują błędy w produkcji.
źródło
Znalazłem jeszcze jedną przyczynę błędu 500, gdy DEBUG = False. Używam Django
compressor
użyteczność i nasze referencje dodanych front-end inżynier fontowe wewnątrz wcompress css
bloku w szablonie Django. Lubię to:Rozwiązaniem było przeniesienie łącza do
ttf
pliku poniżejendcompress
linii.źródło
Miałem podobny problem i opiszę, jak rozwiązałem mój, ponieważ możliwe, że ktoś również doświadcza tego samego.
W moim przypadku błąd został spowodowany, ponieważ serwer nie znalazł niektórych plików statycznych ze strony głównej.
Upewnij się więc, że błąd występuje tylko na
index
lub na innej stronie. Jeśli problem występuje tylko w indeksie, najprawdopodobniej musisz sprawdzić pliki statyczne. Zalecam otwarcie konsoli podglądu Chrome i sprawdzenie, czy nie ma błędów.W moim przypadku serwer nie mógł znaleźć
favicon.ico
i dwa inne CSS.Aby to naprawić, zdałem
python manage.py collectstatic
i zadziałało.źródło
Wiem, że ten post jest dość stary, ale nadal jest doskonale aktualny.
Za to, co jest warte - dostawałem 500
DEBUG = False
za wszystkie strony w mojej witrynie.Podczas debugowania nie otrzymałem żadnego śledzenia.
Musiałem przejrzeć każdy statyczny link w moich szablonach w mojej witrynie i znalazłem jeden / (ukośnik) przed moim źródłem obrazu. {% static ...%}. Spowodowało to błąd 500,
DEBUG = False
ale działało idealnieDebug = True
bez błędów. Bardzo irytujące! Być ostrzeżonym! Wiele godzin straconych z powodu ukośnika ...źródło
Może chcesz uruchomić
python manage.py collectstatic
po ustawieniuDEBUG = False
iALLOWED_HOSTS = ['127.0.0.1']
wsettings.py
. Po tych dwóch krokach moja aplikacja internetowa działała dobrze na moim lokalnym serwerze, nawet w trybie DEBUG = False.BTW Mam te ustawienia w
settings.py
.Zakładam, że może ustawienie whitenoise ma coś wspólnego z komendą kolektywną.
źródło
Ok, po wypróbowaniu tylu rzeczy, poprawnym rozwiązaniem jest ...
musisz ustawić
DEBUG = 'FALSE'
nieFalse
lubFALSE
, ale'FALSE'
z''
źródło