Sobald ich das ändern DEBUG = False
, wird meine Website generieren 500 (mit wsgi & manage.py runserver), und es gibt keine Fehlerinformationen in Apache error log und es wird normal laufen , wenn ich ändern debug
zu True
.
Ich verwende Django 1.5 & Python 2.7.3. Hier ist das Apache-Zugriffsprotokoll und ohne 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-^^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
quelle
quelle
Antworten:
Django 1.5 hat die Einstellung für zulässige Hosts eingeführt , die aus Sicherheitsgründen erforderlich ist. Eine mit Django 1.5 erstellte Einstellungsdatei enthält diesen neuen Abschnitt, den Sie hinzufügen müssen:
Fügen Sie Ihren Host hier wie
['www.beta800.net']
oder['*']
für einen schnellen Test hinzu, aber verwenden Sie ihn nicht['*']
für die Produktion .quelle
['*']
in der Produktion zu verwenden.django-pipeline
Verhalten zusammen, wenn die statische Aufladung noch nicht erfasst wurde. Als allgemeiner Tipphandle_uncaught_exception
hilft Ihnen das Platzieren eines Haltepunkts in Djangos Methode dabei, herauszufinden, was hier vor sich geht.Ich weiß, dass dies spät ist, aber ich habe hier nach meinem Fehler 500 gesucht.
DEBUG=False
In meinem Fall stellte sich heraus, dass dies der Fehler war ,ALLOWED_HOSTS
aber ich habe ihnos.environ.get('variable')
zum Auffüllen der Hosts verwendet. Ich habe dies erst bemerkt, als ich die Protokollierung aktiviert habe Protokollieren Sie alle Fehler in der Datei mit der folgenden und es wird protokolliert, auch wennDEBUG=False
:quelle
Ich habe das gleiche Problem erst kürzlich in Django 2.0 festgestellt. Ich konnte das Problem durch Einstellen herausfinden
DEBUG_PROPAGATE_EXCEPTIONS = True
. Siehe hier: https://docs.djangoproject.com/de/2.0/ref/settings/#debug-propagate-exceptionsIn meinem Fall war der Fehler
ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'
. Ich habe das behoben, indem ich lokal ausgeführt habepython manage.py collectstatic
.quelle
In meinem Fall hat mich das Lesen von Dokumenten von Apps von Drittanbietern ordnungsgemäß gerettet.
Der Täter? django_compressor
ich hatte
DEBUG = True
gab mir immer 500. Um das Problem zu beheben, brauchte ich eine Zeile in meinen Einstellungen, um es zum Laufen zu bringenquelle
Richtig, konfigurieren Sie in Django 1.5, wenn DEBUG = False, ALLOWED_HOSTS und fügen Sie Domänen ohne die Portnummer hinzu. Beispiel:
quelle
Sie müssen auch Ihre URLs überall überprüfen. Wenn das auf gesetzt
DEBUG
istFalse
, werden alle URLs ohne Trailing/
als Fehler behandelt, anders als bei IhnenDEBUG = True
. In diesem Fall wird Django/
überall dort angehängt, wo es fehlt. Kurz gesagt, stellen Sie sicher, dass alle Links ÜBERALL mit einem Schrägstrich enden.quelle
DEBUG=False
kann auch ImportfehlerIch 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 gewünschte
ALLOWED_HOSTS
Liste in settings.py eingefügt und ... nichts. Gleicher alter 500er Fehler. Und nein, es fehlte nicht an einer 404.html-Datei.Also beschäftigte ich mich 2 Tage lang mit wilden Theorien, zum Beispiel, dass es etwas mit dem Bereitstellen statischer Dateien zu tun hat (verstehe, dass ich ein Noob bin und Noobs nicht wissen, was sie tun).
Also was war es? Es ist jetzt Herr Moderator, dass wir zu einem nützlichen Tipp kommen. Während mein Entwicklungs-Django Version 1.5.something ist, ist meine Produktionsserver-Version 1.5.something + 1 ... oder vielleicht plus 2. Was auch immer. Nachdem ich
ALLOWED_HOSTS
die Desktop-Version von settings.py hinzugefügt hatte , der das fehlte, was hwjp angefordert hatte - ein "Standardwert in settings.py, möglicherweise mit einem erklärenden Kommentar" -, tat ich dasselbe auf dem Produktionsserver mit die richtige Domain dafür.Ich habe jedoch nicht bemerkt, dass auf dem Produktionsserver mit der späteren Version von Django in settings.py ein Standardwert mit einem erläuternden Kommentar vorhanden war. Es war weit unten, wo ich meinen Eintrag machte, außer Sicht auf dem Monitor. Und natürlich war die Liste leer. Daher meine Zeitverschwendung.
quelle
local_settings.py
für jede Umgebung zu verwenden und es dann zu importierensettings.py
.Ergänzung der Hauptantwort
Es ist ärgerlich, die globalen Konstanten ALLOWED_HOSTS und DEBUG
settings.py
beim Wechsel zwischen Entwicklung und Produktion zu ändern . Ich verwende diesen Code, um diese Einstellungen automatisch festzulegen:Wenn Sie macOS verwenden, können Sie einen allgemeineren Code schreiben:
quelle
Für das, was es wert ist - ich habe
DEBUG = False
nur auf einigen Seiten eine 500 bekommen . Das Zurückverfolgen der Ausnahme mit pdb ergab ein fehlendes Asset (ich vermute, dass das{% static ... %}
Template-Tag der Schuldige für die 500 war.quelle
static
eine CSS-Datei eingefügt, die nicht vorhanden war.Ich hatte das gleiche Problem, als ich es tat
DEBUG = FALSE
. Hier ist eine konsolidierte Lösung, die in den obigen Antworten und anderen Beiträgen verstreut ist.Standardmäßig haben wir in settings.py
ALLOWED_HOSTS = []
. Hier sind mögliche Änderungen, die SieALLOWED_HOSTS
gemäß Szenario vornehmen müssen, um den Fehler zu beheben:1: Ihr Domainname:
2: Ihre bereitgestellte Server-IP, wenn Sie noch keinen Domainnamen haben (was mein Fall war und wie ein Zauber funktioniert hat):
3: Wenn Sie auf lokale Server testen, können Sie bearbeiten
settings.py
odersettings_local.py
als:4: Sie können im
ALLOWED_HOSTS
Wert auch '*' angeben, dies wird jedoch aus Sicherheitsgründen in der Produktionsumgebung nicht empfohlen :Ich habe auch eine detaillierte Lösung in meinem Blog veröffentlicht, auf die Sie möglicherweise verweisen möchten.
quelle
ALLOWED_HOSTS ist NICHT das einzige Problem. Für mich musste ich eine 404.html erstellen und in die Basisebene meiner Vorlagen einfügen (keine App-Ebene). Sie können auch eine 404-Ansicht erstellen und eine 404-Handler-URL hinzufügen, aber ich denke, das ist es Optional. 404.html hat es behoben
in mainproject.urls
in app.views
Erstellen Sie dann eine Vorlage / 404.html
Ich habe dies von einem anderen S / O-Beitrag erhalten, den ich nicht finden kann
BEARBEITEN
Außerdem erhalte ich 500 Fehler, wenn ich Assets mit Whitenoise bediene. Konnte nicht herausfinden, dass ValueError von whitenoise für mein Leben nicht in der Lage war, ein Asset zu finden, das ich auch nicht finden konnte
quelle
python manage.py collectstatic
behoben.Ich habe mehr über dieses Problem gesucht und getestet und festgestellt, dass statische Dateiverzeichnisse, die in settings.py angegeben sind, eine Ursache dafür sein können. Daher müssen wir diesen Befehl zunächst ausführen
In settings.py sollte der Code ungefähr so aussehen:
quelle
Ich weiß, dass dies eine super alte Frage ist, aber vielleicht könnte ich jemand anderem helfen. Wenn nach dem Setzen von DEBUG = False ein Fehler von 500 auftritt, können Sie den runserver manage.py jederzeit in der Befehlszeile ausführen, um Fehler anzuzeigen, die in Webfehlerprotokollen nicht angezeigt werden.
quelle
Es ist Mitte 2019 und ich hatte diesen Fehler nach einigen Jahren der Entwicklung mit Django. Hat mich eine ganze Nacht verwirrt! Es war nicht erlaubt, dass der Host (der eine 400 werfen sollte), alles andere ausgecheckt, schließlich eine Fehlerprotokollierung durchgeführt wurde, nur um festzustellen, dass einige fehlende / oder durcheinandergebrachte statische Dateien (nach collectstatic) mit dem Setup verschraubt waren. Lange Rede, kurzer Sinn, für diejenigen, die ratlos sind und SO PASSIEREN WHITENOISE oder das DJANGO STATICFILE BACKEND WITH CACHE (Manifest Static Files) verwenden, ist dies vielleicht das Richtige für Sie.
Stellen Sie sicher, dass Sie alles einrichten (wie ich es für das Whitenoise-Backend getan habe ... Django-Backends lesen Sie trotzdem weiter) http://whitenoise.evans.io/en/stable/django.html
Wenn der Fehlercode 500 Sie immer noch abschießt, notieren Sie sich Ihre Einstellungen.STATICFILES_STORAGE.
Stellen Sie entweder ein (für weißes Backend mit Komprimierung)
oder (als Django-Standardeinstellung belassen)
Alles in allem schien THE PROBLEM von der Tatsache zu stammen, dass dieser Whitenoise-Cache + Komprimierungs-Backend ->
oder das eigene Caching-Backend des Django ->
... hat für mich nicht ganz gut funktioniert, da mein CSS auf einige andere Quellen verwies, die während des 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
quelle
Ich denke, es könnten auch die http-Servereinstellungen sein. Meins ist immer noch kaputt und hatte die ganze Zeit ALLOWED_HOSTS. Ich kann lokal darauf zugreifen (ich benutze Gunicorn), aber nicht über den Domainnamen, wenn DEBUG = False. Wenn ich versuche, den Domainnamen zu verwenden, wird mir der Fehler angezeigt, sodass ich denke, dass es sich um ein Nginx-Problem handelt.
Hier ist meine Conf-Datei für Nginx:
quelle
Ich habe ein ähnliches Problem, in meinem Fall wurde es durch ein kommentiertes Skript im Body-Tag verursacht.
quelle
Ich bin auf dieses Problem gestoßen. Es stellte sich heraus, dass ich mithilfe des
static
Vorlagen-Tags eine Datei in die Vorlage aufgenommen habe, die nicht mehr vorhanden war. Ein Blick in die Protokolle zeigte mir das Problem.Ich denke, dies ist nur einer von vielen möglichen Gründen für diese Art von Fehler.
Moral der Geschichte: Immer Fehler protokollieren und Protokolle immer überprüfen.
quelle
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 entfernte die Zeile,
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
die ich gefunden hatte, aus der Dokumentation des Heroku.Ich musste auch ein zusätzliches Verzeichnis (dank einer anderen SO-Antwort )
static
im Stammverzeichnis der Django-Anwendung hinzufügenmyapp/static
, obwohl ich es nicht benutzte. Durch Ausführen des Befehlspython manage.py collectstatic
vor dem Ausführen des Servers wurde das Problem behoben. Endlich fing es an gut zu funktionieren.quelle
Ich fing an, die 500 für debug = False in Form von zu bekommen
beim Auslösen von django.core.exceptions.ValidationError anstelle von rest_framework.serializers.ValidationError
Um fair zu sein, hat es bereits zuvor 500 ausgelöst, aber als ValidationError mit debug = False wurde dies in NoReverseMatch geändert.
quelle
Dies kann vielleicht jemand anderem helfen, in meinem Fall das Problem mit dem fehlenden Favicon.
quelle
Ich weiß, dass dies eine alte Frage ist, aber ich habe auch einen Fehler von 500 erhalten, wenn DEBUG = False. Nach einigen Stunden wurde mir klar, dass ich vergessen hatte, einige der Links in meiner base.html mit einem abschließenden Schrägstrich zu beenden.
quelle
Dies ist alt und mein Problem hing letztendlich mit dem Problem zusammen, aber nicht mit dem OP, aber meine Lösung ist für alle anderen, die das oben Genannte erfolglos 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. Auf meinem Server war der CSS-Minifier nicht installiert und der Fehler wurde ausgelöst. Wenn Sie Django-Mako-Plus verwenden, ist dies möglicherweise Ihr Problem.
quelle
Eine kleine Sache zu beachten: Wenn das Array None enthält, werden alle nachfolgenden zulässigen Hosts ignoriert.
Django version 1.8.4
quelle
Ein bisschen zu spät zur Party, und natürlich könnte es eine Legion von Problemen geben, aber ich hatte ein ähnliches Problem und es stellte sich heraus, dass ich {%%} Sonderzeichen in meiner HTML-Bemerkung hatte ...
quelle
Ich hatte eine Ansicht, die einen 500-Fehler in debug = false auslöste, aber in debug = true funktionierte. Für alle, die so etwas bekommen und zulässige Hosts nicht das Problem sind, habe ich meine Ansicht korrigiert, indem ich das statische Tag einer Vorlage aktualisiert habe, das auf den falschen Speicherort zeigte.
Daher würde ich vorschlagen, nur zu überprüfen, ob Links und Tags in allen verwendeten Vorlagen luftdicht sind. Vielleicht rutschen bestimmte Dinge beim Debuggen durch das Netz, geben aber Fehler in der Produktion.
quelle
Ich habe eine weitere Ursache für den 500-Fehler gefunden, wenn DEBUG = False. Ich verwende das Django-
compressor
Dienstprogramm und unser Front-End-Techniker hat Verweise auf Schriftdateien in einemcompress css
Block in einer Django-Vorlage hinzugefügt . So was:Die Lösung bestand darin, den Link zu der
ttf
Datei unterhalb derendcompress
Zeile zu verschieben.quelle
Ich hatte ein ähnliches Problem und werde berichten, wie ich mein Problem gelöst habe, weil es sein könnte, dass jemand das gleiche erlebt.
In meinem Fall wurde der Fehler verursacht, weil der Server einige statische Dateien von der Homepage nicht gefunden hat.
Stellen Sie daher sicher, dass der Fehler nur auf der
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 Chrome-Vorschau-Konsole zu öffnen und nach Fehlern zu suchen.In meinem Fall konnte der Server
favicon.ico
und zwei andere CSS nicht finden .Um dies zu beheben, habe ich bestanden
python manage.py collectstatic
und es hat funktioniert.quelle
Ich weiß, dass dieser Beitrag ziemlich alt ist, aber er ist heute noch vollkommen relevant.
Für das, was es wert ist - ich habe 500
DEBUG = False
für alle Seiten meiner Website erhalten.Ich habe beim Debuggen kein Traceback erhalten.
Ich musste jeden statischen Link in meinen Vorlagen auf meiner Website durchgehen und fand einen / (Schrägstrich) vor meiner Bildquelle. {% static ...%}. Dies verursachte den 500-Fehler
DEBUG = False
, funktionierte aberDebug = True
ohne Fehler einwandfrei . Sehr nervig! Sei gewarnt! Viele Stunden Zeitverschwendung durch einen Schrägstrich ...quelle
Vielleicht möchten Sie laufen ,
python manage.py collectstatic
nachdem Sie gesetztDEBUG = False
undALLOWED_HOSTS = ['127.0.0.1']
insettings.py
. Nach diesen beiden Schritten lief meine Webanwendung auf meinem lokalen Server auch im DEBUG = False-Modus einwandfrei.Übrigens habe ich diese Einstellungen in
settings.py
.Ich gehe davon aus, dass die Einstellung Weißweiß möglicherweise etwas mit dem Befehl collectstatic zu tun hat.
quelle
Ok, nachdem Sie so viele Dinge ausprobiert haben, ist die richtige Lösung ...
Sie müssen
DEBUG = 'FALSE'
nichtFalse
oderFALSE
, sondern'FALSE'
mit einstellen''
quelle