Impostazione DEBUG = False cause 500 Errore


298

Una volta modificato DEBUG = False, il mio sito genererà 500 (utilizzando wsgi & manage.py RunServer) e non ci sono informazioni di errore nel registro degli errori di Apache e funzionerà normalmente quando cambio debuga True.

Sto usando Django 1.5 e Python 2.7.3 qui è il registro di accesso di Apache e senza alcun registro nel registro degli errori di 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"

Ecco il mio file delle impostazioni:

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',
)

Sì, ho aggiunto 403 e 404 file html 500 nei miei modelli dir
zhiguo.wang

Sono presenti file 500.html e 404.html e 403.html? Penso di ricordare di aver avuto un problema con un progetto distribuito che non aveva quei file nella directory principale dei miei modelli.
esse,

Se il tuo sito sta generando un errore 500, ci dovrebbero essere alcune informazioni nel registro di Apache, potresti voler incollare un pezzo della fine del file di registro degli errori affinché le persone possano guardarlo.
esse,

87
Potresti voler cambiare il tuo SECRET_KEY ora che è disponibile pubblicamente ...
Fraxtil,

1
Questa non è la risposta per tutti. Come mostrato di seguito in stackoverflow.com/a/37218484/4028977 , potrebbero esserci molte ragioni per cui ciò sta accadendo. Con alcune semplici registrazioni puoi scoprirlo senza congetture.
Rob,

Risposte:


413

Django 1.5 ha introdotto l' impostazione degli host consentiti per motivi di sicurezza. Un file di impostazioni creato con Django 1.5 ha questa nuova sezione che è necessario aggiungere:

# 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 = []

Aggiungi il tuo host qui come ['www.beta800.net']o ['*']per un test rapido, ma non utilizzarlo ['*']per la produzione .


32
Wow - questo ci ha morso un po '. Fa davvero schifo che questa impostazione sia sepolta nei documenti. Il nostro sito di produzione non funzionerebbe con DEBUG = False. Grazie per averlo sottolineato !!!
shreddd,

4
Ulteriori informazioni sui problemi di sicurezza che hanno introdotto questa impostazione: attacchi pratici dell'intestazione dell'host HTTP . Ti convincerà sicuramente a non utilizzare ['*']in produzione.
gertvdijk,

4
bl. fastidioso che non lo inseriscano nemmeno come valore predefinito in settings.py, forse con un commento esplicativo ...
hwjp,

7
A volte mi chiedo perché Django stia diventando sempre più ritardato! Sicuramente quei ragazzi sono programmatori molto migliori di me, ma non capisco davvero la decisione di "riparare" le vulnerabilità a livello di applicazione, quando la mossa reale e pulita sarebbe quella di configurare correttamente il server. Lo stesso vale per "cache dei modelli" e "connessioni persistenti" ... Codice inutile che non verrà mai utilizzato in un sito Web serio; è ancora presentato come il santo graal della programmazione! Forse sono solo io, ho sbagliato prima!
StefanNch,

3
Non importa, ho trovato il problema. Era collegato al django-pipelinecomportamento quando lo statico non è stato ancora raccolto. Come suggerimento generale, posizionare un punto di interruzione nel handle_uncaught_exceptionmetodo di Django ti aiuterà a capire cosa sta succedendo qui.
Pieter,

51

So che è tardi, ma sono finito qui con una ricerca del mio errore 500 con DEBUG=False , nel mio caso si è rivelato essere il ALLOWED_HOSTSma stavo usando os.environ.get('variable')per popolare gli host, non l'ho notato fino a quando non ho abilitato la registrazione, puoi registra tutti gli errori nel file con il seguito e registrerà anche quando 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
Questa dovrebbe essere la risposta accettata. È molto più utile semplicemente chiedere al framework stesso cosa c'è che non va dopo aver utilizzato le impostazioni di produzione, invece di provare a indovinare.
Stefan Dragnev,

4
In effetti, questo non è qualcosa di cui vagare nel buio. Basta guardare il messaggio di errore che normalmente vedresti usando questo metodo. Nel mio caso, mi mancava un'impostazione diversa nelle mie impostazioni.py che la mia app stava cercando. Tutto ciò di cui avevo bisogno era il registro per rintracciarlo. Una nota importante: ho aggiunto / path / a / my / django / prima di "mysite.log" come mostrato nell'esempio di documenti: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
Ho passato ore a cercare una soluzione, inutile. secondo questa risposta basta usare la registrazione e dovresti avere il tuo problema, questa è la risposta migliore. Grazie OP!
Stack

Gli errori del mio server non sembrano produrre alcun registro! Ho provato varie configurazioni di registrazione senza alcun risultato. Qualche idea?
cammil

5
Grazie! Questo ha risolto il mio errore. Ho scoperto che dovevo eseguire collectstatic per raccogliere alcune risorse statiche da un pacchetto.
themessup

33

Ho riscontrato lo stesso problema solo di recente in Django 2.0. Sono stato in grado di capire il problema impostando DEBUG_PROPAGATE_EXCEPTIONS = True. Vedi qui: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

Nel mio caso, l'errore era ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. L'ho risolto eseguendo localmente python manage.py collectstatic.


Vado la stessa cosa, ma collectstatic non mi ha risolto il problema. Hai ricevuto un "errore impossibile da raggiungere"? In quel caso, come lo hai risolto?
Kavi Vaidya,

23

Nel mio caso, leggere documenti di app di terze parti mi ha salvato in modo corretto.

Il colpevole? django_compressor

avevo

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

DEBUG = True mi ha sempre dato 500. Per risolverlo, avevo bisogno di una linea nelle mie impostazioni per farlo funzionare

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

Grazie è stato il motivo per cui non ha funzionato per me, ma quella linea non impedisce a django_compressor di fare il suo lavoro?
Fanckush,

1
@Fanckush Nope. Nessun danno è coinvolto. django-compressor.readthedocs.io/it/latest/settings/… Il compressore continuerebbe a fare perfettamente il suo lavoro! Comprimi semplicemente tutte le tue statistiche (come css), in modo che l'impostazione sia così inutile poiché le tue risorse sono già compresse
KhoPhi

13

Bene, in Django 1.5 se DEBUG = False, configura ALLOWED_HOSTS, aggiungendo domini senza il numero di porta. esempio:

ALLOWED_HOSTS = ['localhost']

Per qualunque motivo, usare 'localhost' non ha funzionato per me. Ho dovuto usare invece l'IP "127.0.0.1". Sono stato anche in grado di usare '*' se stai andando fuori di testa e vuoi solo che funzioni. Non consiglierei di farlo in produzione, tuttavia. OSX con Django 1.4.20
BlakePetersen,

11

Devi anche controllare i tuoi URL in tutto il luogo. Quando DEBUGè impostato su False, tutti gli URL senza trascinamento /vengono trattati come un bug, a differenza di quando lo hai DEBUG = True, nel qual caso Django aggiungerà /ovunque manchi. Quindi, in breve, assicurati che tutti i collegamenti finiscano con una barra OVUNQUE.


3
usa solo il tag reverse e url e dovresti stare bene
maazza,

impostazione DEBUG=Falsepuò svelare errori di importazione così: stackoverflow.com/questions/25676453/...
ecoe

anche collegamenti a risorse js e css?
amchugh89,

@ amchugh89: no, solo URL "django"
webzy,

1
Il mio problema è che whitenoise non è stato in grado di trovare un'immagine e ha lanciato ValueError. Inoltre non riuscivo a trovarlo, ma non sapevo come dire a chi non cercarlo. Quindi ho disattivato il whitenoise, ho usato il servizio statico django e ora posso eseguire debug = False in prod. Ovviamente non è l'ideale :(
amchugh89,

7

Ho una storia esilarante per tutti. Dopo aver raggiunto questa pagina ho detto "Eureka! Sono salvato. DEVE essere il mio problema." Quindi ho inserito l' ALLOWED_HOSTSelenco richiesto in setting.py e ... niente. Lo stesso vecchio errore 500. E no, non è stato per mancanza di un file 404.html.

Quindi per 2 giorni mi sono occupato di teorie selvagge, come quella che aveva a che fare con il servizio di file statici (capisci che sono un noob e che nessuno sa cosa stanno facendo).

Allora cos'era? Ora è il signor Moderatore che arriviamo a un suggerimento utile. Mentre il mio sviluppo Django è la versione 1.5. Qualcosa, la mia versione del server di produzione è 1.5. Qualcosa + 1 ... o forse più 2. Qualunque cosa. E così dopo aver aggiunto la ALLOWED_HOSTSversione desktop di settings.py , che mancava di ciò che hwjp richiedeva --- un "valore predefinito in settings.py, forse con un commento esplicativo" --- Ho fatto lo stesso sul server di produzione con il dominio appropriato per questo.

Ma non ho notato che sul server di produzione con la versione successiva di Django c'era un valore predefinito in settings.py con un commento esplicativo. Era ben al di sotto del punto in cui ho effettuato il mio ingresso, fuori dalla vista sul monitor. E ovviamente l'elenco era vuoto. Da qui la mia perdita di tempo.


1
ho avuto esattamente lo stesso schema esilarante!, tranne per il fatto che è diventato divertente solo dopo averlo trovato, grazie. prima era semplicemente frustrante
binithb il

Qualcosa che aiuta in tutto questo è usare a local_settings.pyper ogni ambiente e poi importarlo settings.py.
Nicorellius,

1
quello che mi piace fare è avere una directory settings / invece di settings.py. In questa directory, puoi avere file .py separati per ambienti diversi e un base.py per le impostazioni generali. Le impostazioni dipendenti dalla produzione possono quindi iniziare importando * dalle impostazioni di base e sovrascrivendo tutto ciò di cui hanno bisogno. Inoltre, la richiesta init Py bisogno a sua volta che le impostazioni / directory in un modulo valido, in grado di importare da prima base.py, e poi cercare di importazione da un local.py (che sarebbe solo esiste localmente). ciò significherebbe che non è necessario specificare manualmente le impostazioni locali
mephisto

7

Completare la risposta principale
È fastidioso cambiare le costanti globali ALLOWED_HOSTS e DEBUG settings.pyquando si passa da sviluppo a produzione. Sto usando questo codice per impostare automaticamente queste impostazioni:

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",]
    ...

Se usi macOS potresti scrivere un codice più generico:

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

6

Per quello che vale - ne stavo ottenendo un 500 DEBUG = Falsesolo in alcune pagine. Rintracciare l'eccezione con pdb ha rivelato una risorsa mancante (sospetto che il {% static ... %}tag template sia stato il colpevole della 500.


1
Questo era anche il mio problema, il modello di base a cui faceva riferimento la pagina 404 personalizzata utilizzava il tag statico ma non includeva {% load static%} in alto. Non l'ho notato altrove perché i miei altri modelli avevano questa linea ma ha senso metterlo comunque nella base in quanto si riferisce a file statici ovunque.
Krischan,

2
Stessa soluzione qui - Stavo usando staticper includere un file CSS che non esisteva.
Phil Gyford,

5

Ho affrontato lo stesso problema quando l'ho fatto DEBUG = FALSE. Ecco una soluzione consolidata come sparso nelle risposte sopra e altri post.

Per impostazione predefinita, in settings.py abbiamo ALLOWED_HOSTS = []. Ecco le possibili modifiche che dovrai apportare in ALLOWED_HOSTSbase allo scenario per eliminare l'errore:

1: il tuo nome di dominio:

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

2: il tuo IP del server distribuito se non hai ancora un nome di dominio (che era il mio caso e ha funzionato come un incantesimo):

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

3: se stai testando sul server locale, puoi modificare il tuo settings.pyo settings_local.pycome:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: puoi anche fornire '*' nel ALLOWED_HOSTSvalore ma non è raccomandato nell'ambiente di produzione per motivi di sicurezza:

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

Ho anche pubblicato una soluzione dettagliata sul mio blog che potresti voler consultare.


5

ALLOWED_HOSTS NON è l'unico problema, per me ho dovuto creare un 404.html e inserirlo nel livello base dei miei modelli (non a livello di app) - Inoltre, puoi creare una vista 404 e aggiungere un URL 404handler ma penso che sia così opzionale. 404.html risolto

in mainproject.urls

handler404 = 'app.views.custom_404'

in app.views

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

quindi crea un modello / 404.html

ottenuto da un altro post S / O che non riesco a trovare

MODIFICARE

inoltre, ricevo 500 errori quando offro asset con whenoenoise. Non riuscivo a capire che per la vita di me, l'errore era ValueError dal momento che non riuscivo a trovare un asset che non riuscivo a trovare, ho dovuto andare con il servizio predefinito di django per ora


8
Ho avuto lo stesso problema con il whitenoise. python manage.py collectstaticaggiustato.
Eugene Pakhomov,

1
@ amchungh89 sei un salvavita! Grazie per averlo sottolineato.
Deepak Sharma,

5

Stavo cercando e testando di più su questo problema e mi sono reso conto che le directory dei file statici specificate in settings.py possono essere una causa di ciò, quindi, per prima cosa, dobbiamo eseguire questo comando

python manage.py collectstatic

in settings.py, il codice dovrebbe assomigliare a questo:

STATIC_URL = '/static/'

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

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

3

So che questa è una domanda super vecchia, ma forse potrei aiutare qualcun altro. Se si verifica un errore 500 dopo aver impostato DEBUG = False, è sempre possibile eseguire il run manage.py nella riga di comando per visualizzare eventuali errori che non verranno visualizzati in alcun registro degli errori Web.


2

È la metà del 2019 e ho riscontrato questo errore dopo alcuni anni di sviluppo con Django. Mi ha sconcertato per un'intera notte! Non è stato permesso all'host (che dovrebbe lanciare un 400), tutto il resto è stato estratto, alla fine ha fatto qualche errore nella registrazione solo per scoprire che alcuni manifest di file statici mancanti o incasinati (dopo collectstatic) stavano rovinando l'installazione. Per farla breve, per coloro che sono perplessi E COSÌ FELICI STANNO USANDO WHITENOISE O IL BACKEND STATICO DI DJANGO CON CACHE (manifest manifest files), forse questo è per te.

  1. Assicurati di aver impostato tutto (come ho fatto per il backend whitenoise ... django backend leggi comunque) http://whitenoise.evans.io/en/stable/django.html

  2. Se il codice di errore 500 ti abbatte ancora, prendi nota delle tue impostazioni.STATICFILES_STORAGE.

Impostalo su uno dei due (per il backend whitenoise con compressione)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

o (lascia come predefinito django)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Tutto sommato, THE PROBLEM sembrava derivare dal fatto che questa cache whenoenoise + backend di compressione ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

o il backend nella cache del django ->

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

... non ha funzionato abbastanza bene per me, dal momento che il mio CSS faceva riferimento ad altre fonti che potrebbero essere confuse durante la cache collettiva / backend. Questo problema è anche potenzialmente evidenziato in http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot


1

Penso che potrebbero essere anche le impostazioni del server http. Il mio è ancora rotto e ha ALLOWED_HOSTS tutto il tempo. Posso accedervi localmente (uso gunicorn), ma non tramite il nome di dominio quando DEBUG = False. quando provo ad usare il nome di dominio, questo mi dà l'errore, quindi mi fa pensare che sia un problema relativo a nginx.

Ecco il mio file conf per 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;
}

il mio file di configurazione di gunicorn è il seguente: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: application
user2868304

il mio problema è ora risolto, stavo usando lo script gunicorn_django e mi stava dando messaggi deprecati. Non so ancora perché abbia funzionato localmente, non ho cambiato la mia configurazione di nginx, ho semplicemente cambiato il vecchio script per usare gunicorn e usare invece il modulo wsgi: application e funziona di nuovo. Gunicorn stava lanciando anche alcuni messaggi di deprecazione, ma nulla di specifico per il mio problema.
user2868304

1

Ho il problema simile, nel mio caso è stato causato dall'avere uno script Commented all'interno del tag body.

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

1

Ho riscontrato questo problema. Si scopre che stavo includendo nel modello, usando il statictag template, un file che non esisteva più. Uno sguardo nei registri mi ha mostrato il problema.

Immagino che questo sia solo uno dei tanti motivi possibili per questo tipo di errore.

Morale della storia: registra sempre gli errori e controlla sempre i registri.


1

Grazie alla @squarebear, nel file di registro, ho trovato l'errore: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

Ho avuto alcuni problemi nella mia app django. Ho rimosso la riga
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'che ho trovato dalla documentazione dell'heroku.

Ho anche dovuto aggiungere una directory extra (grazie a un'altra risposta SO ) staticnella radice dell'applicazione django, myapp/staticanche se non la stavo usando. Quindi eseguire il comando python manage.py collectstaticprima di eseguire il server ha risolto il problema. Alla fine, ha iniziato a funzionare bene.


Come risponde alla domanda originale?
Nick,

1

Ho iniziato a ottenere il 500 per debug = False sotto forma di

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

quando si solleva django.core.exceptions.ValidationError invece di sollevare rest_framework.serializers.ValidationError

Ad essere onesti, stava già aumentando un 500 prima, ma come ValidationError, con debug = False, questo è cambiato in NoReverseMatch.


1

questo forse aiuta qualcun altro, nel mio caso il problema con la favicon mancante.


0

So che questa è una vecchia domanda, ma stavo anche ricevendo un errore 500 quando DEBUG = False. Dopo diverse ore, mi sono reso conto che avevo dimenticato di terminare alcuni dei collegamenti nel mio base.html con una barra finale.


anche la roba css e js?
amchugh89,

0

Questo è vecchio e il mio problema è finito per essere correlato al problema, ma non per l'OP, ma la mia soluzione è per chiunque abbia tentato senza successo quanto sopra.

Avevo un'impostazione in una versione modificata di Django per minimizzare i file CSS e JS eseguiti solo quando DEBUG era disattivato. Il mio server non aveva installato il minificatore CSS e ha generato l'errore. Se stai usando Django-Mako-Plus, questo potrebbe essere il tuo problema.


0

Una piccola cosa da notare, se l'array contiene None, tutti gli host consentiti successivi vengono ignorati.

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

Un po 'tardi alla festa, e ovviamente ci potrebbero essere una serie di problemi, ma ho avuto un problema simile e ho scoperto che avevo {%%} caratteri speciali nella mia osservazione HTML ...

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

0

Ho avuto una visione che ha generato un errore 500 in debug = false ma ha funzionato in debug = true. Per chiunque stia ottenendo questo tipo di cose e gli host consentiti non sia il problema, ho risolto la mia vista aggiornando il tag statico di un modello che puntava nella posizione sbagliata.

Quindi suggerirei solo che i collegamenti e i tag siano ermetici in tutti i modelli utilizzati, forse alcune cose scivolano attraverso la rete durante il debug ma danno errori nella produzione.


0

Ho trovato un'altra causa dell'errore 500 quando DEBUG = False. Uso l' compressorutilità Django e il nostro ingegnere front-end ha aggiunto riferimenti a file di caratteri all'interno di un compress cssblocco in un modello Django. Come questo:

{% 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 %}

La soluzione era spostare il collegamento al ttffile sotto la endcompressriga.


0

Ho avuto un problema simile a questo e riferirò come ho risolto il mio perché potrebbe essere che anche qualcuno stia vivendo lo stesso.

Nel mio caso, l'errore è stato causato perché il server non ha trovato alcuni file statici dalla homepage.

Quindi assicurati che l'errore si verifichi solo nel file index o si verifica in un'altra pagina. Se il problema si verifica solo nell'indice, molto probabilmente è necessario controllare i file statici. Consiglio di aprire la console di anteprima di Chrome e di verificare eventuali errori.

Nel mio caso, il server non è riuscito a trovare favicon.icoe altri due CSS.

Per risolvere il problema sono passato python manage.py collectstatice ha funzionato.


0

So che questo post è piuttosto vecchio ma è ancora perfettamente pertinente oggi.

Per quello che vale - ne stavo ottenendo un 500 DEBUG = Falseper tutte le pagine del mio sito.

Non ho avuto traceback durante il debug.

Ho dovuto esaminare tutti i link statici nei miei modelli all'interno del mio sito e ho trovato uno / (barra) davanti alla mia fonte di immagini. {% statico ...%}. Ciò ha causato l'errore 500 DEBUG = Falsema ha funzionato perfettamente Debug = Truesenza errori. Molto noioso! Stai attento! Molte ore di tempo sprecate a causa di una barra in avanti ...


0

Potresti voler correre python manage.py collectstaticdopo aver impostato DEBUG = Falsee ALLOWED_HOSTS = ['127.0.0.1']dentro settings.py. Dopo questi due passaggi, la mia applicazione Web ha funzionato bene nel mio server locale anche con DEBUG = modalità False.

A proposito ho queste impostazioni in 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'

Presumo che forse l'impostazione di whitenoise abbia qualcosa a che fare con il comando collectstatic.


-3

Ok dopo aver provato tante cose, la soluzione corretta è ...

è necessario impostare DEBUG = 'FALSE'non Falseo FALSE, ma 'FALSE'con''


Penso che 'FALSE' sia una stringa, quindi è uguale a True, ecco perché non viene visualizzato un errore.
aprile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.