Wenn ich DEBUG = False
ändere, generiert meine Site 500 (mithilfe von wsgi & manage.py runserver), und im Apache-Fehlerprotokoll werden keine Fehlerinformationen angezeigt. Wenn ich debug
in True
ändere, wird sie normal ausgeführt.
Ich verwende Django 1.5 & Python 2.7.3 Es gibt ein Apache-Zugriffsprotokoll und kein Protokoll im Apache-Fehlerprotokoll
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"
Hier ist meine Einstellungsdatei:
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-^^[email protected]*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 führte die aus Sicherheitsgründen erforderliche Einstellung für erlaubte Hosts ein. Eine mit Django 1.5 erstellte Einstellungsdatei enthält diesen neuen Abschnitt, den Sie hinzufügen müssen:
# 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 = []
Fügen Sie Ihren Host hier wie ['www.beta800.net']
oder ['*']
für einen schnellen Test hinzu, , verwenden Sie jedoch nicht ['*']
für die Produktion .
Ich weiß, dass dies zu spät ist, aber ich bin mit einer Suche nach meinem Fehler 500 mit DEBUG=False
hier gelandet. In meinem Fall stellte sich heraus, dass dies der ALLOWED_HOSTS
war, aber ich verwendete os.environ.get('variable')
, um die Hosts aufzufüllen. Ich bemerkte dies nicht, bis ich die Protokollierung aktivierte können Sie alle Fehler in der Datei mit dem folgenden Protokoll protokollieren, und es wird auch dann protokolliert, wenn 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',
},
}
}
In meinem Fall rettete mich das Lesen von Dokumenten von Drittanbieter-Apps richtig.
Der schuldige? Django_kompressor
Ich hatte
{% load compress %}
{% compress css %}
... css files linked here ..
{% endcompress %}
DEBUG = True
gab mir immer 500. Um das Problem zu beheben, brauchte ich eine Zeile in meinen Einstellungen, um es auszuführen
COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)
Richtig, in Django 1.5, wenn DEBUG = False, konfigurieren Sie ALLOWED_HOSTS und fügen Domänen ohne die Portnummer hinzu. Beispiel:
ALLOWED_HOSTS = ['localhost']
Ich bin vor kurzem in Django 2.0 auf das gleiche Problem gestoßen. Ich konnte das Problem durch Einstellen von DEBUG_PROPAGATE_EXCEPTIONS = True
herausfinden. Siehe hier: https://docs.djangoproject.com/de/2.0/ref/settings/#debug-propagate-exceptions
In meinem Fall war der Fehler ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'
. Ich habe das behoben, indem ich python manage.py collectstatic
lokal ausführte.
Sie müssen Ihre URLs auch überall überprüfen. Wenn DEBUG
auf False
gesetzt ist, werden alle URLs ohne nachgestellten /
als Fehler behandelt, anders als bei DEBUG = True
. In diesem Fall fügt Django /
überall hinzu, wo er fehlt. Kurz gesagt, stellen Sie sicher, dass alle Links mit einem Schrägstrich ÜBERALL enden.
Ich habe eine lustige Geschichte für alle. Nachdem ich diese Seite erreicht hatte, sagte ich "Eureka! Ich bin gerettet. Das MUSS mein Problem sein." Also habe ich die erforderliche ALLOWED_HOSTS
-Liste in setting.py eingefügt und ... nichts. Gleicher alter 500 Fehler. Und nein, es fehlte nicht an einer 404.html-Datei.
Also beschäftigte ich mich zwei Tage lang mit wilden Theorien, zum Beispiel, dass es etwas mit statischen Dateien zu tun hatte (verstehen Sie, dass ich ein Noob bin und Noobs nicht wissen, was sie tun).
Was war es also? Nun, Herr Moderator, kommen wir zu einem nützlichen Tipp. Während mein Entwicklungs-Django die Version 1.5 ist, ist meine Produktionsserverversion 1.5. Etwas + 1 ... oder vielleicht plus 2. Was auch immer. Und nachdem ich ALLOWED_HOSTS
zur Desktop-Version von settings.py hinzugefügt hatte, fehlte das, was hwjp angefordert hatte - einen "Standardwert in settings.py, möglicherweise mit einem erläuternden Kommentar" --- Ich tat das Gleiche auf dem Produktionsserver mit der richtigen Domäne dafür.
Ich habe jedoch nicht bemerkt, dass auf dem Produktionsserver mit der späteren Version von Django ein Standardwert in settings.py mit einem erläuternden Kommentar vorhanden war. Es war weit unten, wo ich eintrat, außer Sicht auf dem Monitor. Und natürlich war die Liste leer. Daher meine Zeitverschwendung.
Für das, was es wert ist - ich habe nur auf einigen Seiten eine 500 mit DEBUG = False
bekommen. Die Rückverfolgung der Ausnahme mit pdb ergab ein fehlendes Asset (ich vermute, dass das {% static ... %}
-Template-Tag der Täter der 500 war.
Ergänzung der Hauptantwort
Es ist ärgerlich, die globalen Konstanten ALLOWED_HOSTS und DEBUG in settings.py
zu ändern, wenn zwischen Entwicklung und Produktion gewechselt wird .. Ich benutze diesen Code, um diese Einstellungen automatisch festzulegen:
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",]
...
Wenn Sie macOS verwenden, können Sie einen allgemeineren Code schreiben:
if socket.gethostname().endswith(".local"): # True in your local computer
DEBUG = True
ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
else:
...
Ich hatte das gleiche Problem, als ich DEBUG = FALSE
tat. Hier ist eine konsolidierte Lösung, wie sie in den obigen und anderen Beiträgen verstreut ist.
In settings.py haben wir standardmäßig ALLOWED_HOSTS = []
. Hier sind mögliche Änderungen, die Sie je nach Szenario im ALLOWED_HOSTS
-Wert vornehmen müssen, um den Fehler zu beseitigen:
1: Ihr Domainname:
ALLOWED_HOSTS = ['www.example.com'] # Your domain name here
2: Ihre bereitgestellte Server-IP, wenn Sie noch keinen Domänennamen haben (was bei mir der Fall war und wie ein Zauber funktionierte):
ALLOWED_HOSTS = ['123.123.198.123'] # Enter your IP here
3: Wenn Sie auf einem lokalen Server testen, können Sie Ihren settings.py
oder settings_local.py
wie folgt bearbeiten:
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
4: Sie können auch "*" im ALLOWED_HOSTS
-Wert angeben, jedoch wird aus Sicherheitsgründen in der Produktionsumgebung nicht empfohlen:
ALLOWED_HOSTS = ['*'] # Not recommended in production environment
Ich habe auch eine ausführliche Lösung in meinem blog veröffentlicht, auf die Sie sich beziehen können.
ALLOWED_HOSTS ist NICHT das einzige Problem, für mich musste ich eine 404.html erstellen und in die Basisebene meiner Vorlagen (nicht App-Ebene) einfügen. Außerdem können Sie eine 404-Ansicht erstellen und eine 404-Handler-URL hinzufügen wahlweise. 404.html hat es behoben
in mainproject.urls
handler404 = 'app.views.custom_404'
in app.views
def custom_404(request):
return render(request, '404.html', {}, status=404)
dann machen Sie eine template/404.html Vorlage
habe dies von einem anderen S/O-Beitrag erhalten, dass ich es nicht finden kann
EDIT
ich erhalte auch 500 Fehler, wenn ich Assets mit Whitenoise bediene. Ich konnte nicht herausfinden, dass ValueError von Whitenoise nicht in der Lage war, einen Vermögenswert zu finden, den ich auch nicht finden konnte
Ich habe mehr über dieses Problem gesucht und getestet, und mir wurde klar, dass die in settings.py angegebenen statischen Dateiverzeichnisse eine Ursache dafür sein können. Daher müssen wir diesen Befehl ausführen
python manage.py collecstatic
in settings.py sollte der Code ungefähr so aussehen:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Ich weiß, dass dies eine sehr alte Frage ist, aber vielleicht könnte ich jemand anderem helfen. Wenn Sie nach dem Festlegen von DEBUG = False einen Fehler von 500 haben, können Sie den manage.py-Runserver immer in der Befehlszeile ausführen, um Fehler anzuzeigen, die nicht in den Webfehlerprotokollen angezeigt werden.
Dank @squarebear habe ich in der Protokolldatei den Fehler gefunden: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>
.
Ich hatte einige Probleme mit meiner Django-App. Ich habe die Leitung entferntSTATICFILES_STORAGE = 'whitenoise.Django.GzipManifestStaticFilesStorage'
den ich aus der Dokumentation des Heroku gefunden habe.
Ich musste auch ein zusätzliches Verzeichnis hinzufügen (dank einer anderen SO answer ) static
im Stammverzeichnis der Django-Anwendung als myapp/static
, obwohl ich es nicht verwendet habe. Wenn Sie den Befehl python manage.py collectstatic
ausführen, bevor Sie den Server ausführen, wurde das Problem behoben. Schließlich hat es gut funktioniert.
Ich denke es könnten auch die http-Server-Einstellungen sein. Meins ist immer noch kaputt und hatte die ganze Zeit ALLOWED_HOSTS. Ich kann lokal darauf zugreifen (ich verwende gunicorn), aber nicht über den Domänennamen, wenn DEBUG = False ist. Wenn ich versuche, den Domainnamen zu verwenden, wird mir der Fehler angezeigt, und ich denke, es ist ein Nginx-Problem.
Hier ist meine Conf-Datei für Nginx:
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;
}
Ich bin auf dieses Problem gestoßen. Es stellte sich heraus, dass ich in die Vorlage mit dem Template-Tag static
eine Datei eingefügt hatte, die nicht mehr vorhanden war. Ein Blick in die Protokolle zeigte mir das Problem.
Ich denke, das ist nur einer von vielen möglichen Gründen für diese Art von Fehler.
Moral der Geschichte: Fehler immer protokollieren und immer Protokolle prüfen.
Ich fing an, die 500 für debug = False in Form von zu bekommen
Django.urls.exceptions.NoReverseMatch: Reverse for 'home' not found.
or...
Django.urls.exceptions.NoReverseMatch: Reverse for 'about' not found.
beim Erhöhen Django.core.exceptions.ValidationError anstelle von rest_framework.serializers.ValidationError
Um fair zu sein, es wurde bereits eine 500 erhöht, aber als ValidationError mit debug = False wurde dies in NoReverseMatch geändert.
Ich habe ein ähnliches Problem, in meinem Fall wurde es durch ein kommentiertes Skript im body-Tag verursacht.
<!--<script> </script>-->
Eine kleine Bemerkung: Wenn das Array None enthält, werden alle nachfolgenden erlaubten Hosts ignoriert.
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
Ich hatte ein ähnliches Problem und ich werde berichten, wie ich mein Problem gelöst habe, weil es sein kann, dass auch jemand dasselbe erlebt.
In meinem Fall wurde der Fehler dadurch verursacht, dass der Server einige statische Dateien von der Homepage nicht fand.
Stellen Sie daher sicher, dass der Fehler nur in index
oder auf einer anderen Seite auftritt. Wenn das Problem nur im Index auftritt, müssen Sie höchstwahrscheinlich die statischen Dateien überprüfen. Ich empfehle, die Vorschau-Konsole Chrome zu öffnen und nach Fehlern zu suchen.
In meinem Fall wurde der Server favicon.ico
und zwei andere CSS nicht gefunden.
Indem ich das korrigierte, gab ich einen python manage.py collecstatic
und korrigierte das Problem.
Ich habe noch eine weitere Ursache für den 500-Fehler gefunden, wenn DEBUG = False. Ich verwende das Django-Dienstprogramm compressor
und unser Front-End-Ingenieur fügte Verweise auf Zeichensatzdateien inside a compress css
-Block in einer Django-Vorlage hinzu. So was:
{% 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 %}
Die Lösung bestand darin, den Link in die Datei ttf
unterhalb der Zeile endcompress
zu verschieben.
Ein bisschen zu spät zur Party, und natürlich könnte es viele Probleme geben, aber ich hatte ein ähnliches Problem und es stellte sich heraus, dass ich {%%} Sonderzeichen in meiner HTML-Bemerkung hatte ...
<!-- <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/> -->
Ich weiß, dass dies eine alte Frage ist, aber ich habe auch einen Fehler 500 erhalten, wenn DEBUG = False. Nach einigen Stunden bemerkte ich, dass ich vergessen hatte, einige Links in meiner base.html mit einem nachgestellten Schrägstrich zu beenden.
Ich hatte eine Ansicht, die einen 500-Fehler in Debug = False ausgab, aber in Debug = True arbeitete. Für alle, die diese Art von Dingen erhalten, und Allowed Hosts ist nicht das Problem. Ich korrigierte meine Ansicht, indem das statische Tag einer Vorlage aktualisiert wurde, das auf den falschen Speicherort zeigte.
Ich würde also vorschlagen, dass Links und Tags in allen verwendeten Vorlagen luftdicht geprüft werden. Möglicherweise rutschen bestimmte Dinge beim Debugging durch das Netz, geben jedoch Fehler in der Produktion.
Es war Mitte 2019, und ich war mit diesem Fehler konfrontiert, nachdem ich mich ein paar Jahre mit Django entwickelt hatte. Verblüffte mich für eine ganze Nacht! Es war nicht erlaubt, dass Host (der eine 400 werfen sollte), alles andere auscheckte, und schließlich eine Fehlerprotokollierung durchführte, um herauszufinden, dass einige fehlende oder durcheinandergebrachte statische Dateien (nach collectstatic) mit dem Setup zu tun hatten. Lange Rede kurzer Sinn, für diejenigen, die ratlos sind UND SO PASSIEREN, WHITENOISE OR DAS Django STATICFILE-BACKEND MIT CACHE (Manifest Static Files) verwenden, ist dies vielleicht etwas für Sie.
Stellen Sie sicher, dass Sie alles eingerichtet haben (wie ich es auch für das Backend für Whitenoise getan habe ... Django-Backends lesen Sie trotzdem weiter) http://whitenoise.evans.io/en/stable/Django.html
Wenn der Fehlercode 500 Sie immer noch erschießt, notieren Sie sich Ihre Einstellungen. STATICFILES_STORAGE.
Stellen Sie es auf entweder (für Weiß-Backend mit Komprimierung)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
oder (als Django Standardeinstellung lassen)
STATICFILES_STORAGE = Django.contrib.staticfiles.storage.StaticFilesStorage
Alles in allem schien DAS PROBLEM von der Tatsache zu herrühren, dass dieser Whitenoise-Cache + Komprimierungs-Backend ->
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
oder das Django-eigene Caching-Backend ->
STATICFILES_STORAGE = 'Django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
... hat für mich nicht ganz gut funktioniert, da mein CSS auf einige andere Quellen verweist, die beim Caching von Collectstatic/Backend verwechselt werden könnten. Dieses Problem wird möglicherweise auch in http://whitenoise.evans.io/en/stable/Django.html#storage-troubleshoot hervorgehoben.
Dies ist alt und mein Problem endete damit, dass es mit dem Problem zusammenhängt, aber nicht für das OP, aber meine Lösung ist für alle anderen, die dies ohne Erfolg versucht haben.
Ich hatte eine Einstellung in einer modifizierten Version von Django, um CSS- und JS-Dateien zu minimieren, die nur ausgeführt wurden, wenn DEBUG deaktiviert war. Mein Server hatte den CSS-Minifier nicht installiert und warf den Fehler. Wenn Sie Django-Mako-Plus verwenden, könnte dies Ihr Problem sein.