La définition de DEBUG = False provoque une erreur de 500


298

Une fois que je change le DEBUG = False, mon site va générer 500 ( en utilisant wsgi & manage.py runserver), et il n'y a pas d' information d'erreur dans le journal des erreurs Apache et il fonctionne normalement lorsque je change debugde True.

J'utilise Django 1.5 et Python 2.7.3 voici le journal d'accès Apache et sans aucun journal dans le journal des erreurs 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"

Voici mon fichier de paramètres:

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

Oui, j'ai ajouté un fichier html 403 et 404 500 dans mon répertoire de modèles
zhiguo.wang

Avez-vous des fichiers 500.html et 404.html et 403.html en place? Je pense que je me souviens avoir rencontré un problème avec un projet déployé qui n'avait pas ces fichiers à la racine de mon répertoire de modèles.
esse

Si votre site génère une erreur 500, il devrait y avoir des informations dans le journal d'apache, vous voudrez peut-être coller une partie de la fin du fichier journal d'erreurs pour que les gens regardent.
esse

87
Vous voudrez peut-être changer votre SECRET_KEY maintenant qu'il est accessible au public ...
Fraxtil

1
Ce n'est pas la réponse pour tout le monde. Comme indiqué ci-dessous dans stackoverflow.com/a/37218484/4028977 , il peut y avoir plusieurs raisons à cela. Avec une simple journalisation, vous pouvez le découvrir sans deviner.
Rob

Réponses:


413

Django 1.5 a introduit le paramètre d'hôtes autorisés requis pour des raisons de sécurité. Un fichier de paramètres créé avec Django 1.5 a cette nouvelle section que vous devez ajouter:

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

Ajoutez votre hôte ici comme ['www.beta800.net']ou ['*']pour un test rapide, mais ne l'utilisez pas ['*']pour la production .


32
Wow - cela nous a durement mordu. Il est vraiment nul que ce paramètre soit enfoui dans les documents. Notre site de production ne fonctionnerait pas avec DEBUG = False. Merci de l'avoir signalé !!!
shreddd

4
En savoir plus sur les problèmes de sécurité qui ont introduit ce paramètre: Attaques d'en-tête HTTP Host pratiques . Vous convaincra certainement de ne pas l'utiliser ['*']en production.
gertvdijk

4
bl. ennuyeux de ne pas le coller comme valeur par défaut dans settings.py, peut-être avec un commentaire expansif ...
hwjp

7
Parfois, je me demande pourquoi Django est de plus en plus en retard! Certes, ces gars sont de meilleurs programmeurs que moi, mais je ne comprends vraiment pas la décision de "corriger" les vulnérabilités au niveau de l'application, alors que le vrai et propre mouvement serait de configurer correctement le serveur. Il en va de même pour la "mise en cache de modèles" et les "connexions persistantes" ... Du code inutile qui ne sera jamais utilisé dans un site Web sérieux; est toujours présenté comme le Saint Graal de la programmation! C'est peut-être juste moi, je me suis trompé avant!
StefanNch

3
Peu importe, a trouvé le problème. Elle était liée au django-pipelinecomportement de 'lorsque la statique n'a pas encore été collectée. Comme conseil général, placer un point d'arrêt dans la handle_uncaught_exceptionméthode de Django vous aidera à comprendre ce qui se passe ici.
Pieter

51

Je sais que c'est en retard mais je me suis retrouvé ici avec une recherche de mon erreur 500 avec DEBUG=False, dans mon cas, cela s'est avéré être le ALLOWED_HOSTSmais j'utilisais os.environ.get('variable')pour remplir les hôtes, je ne l'ai pas remarqué jusqu'à ce que j'active la journalisation, vous pouvez enregistrez toutes les erreurs dans le fichier ci-dessous et il se connectera même lorsque 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
Ce devrait être la réponse acceptée. Il est beaucoup plus utile de simplement demander au framework lui-même ce qui ne va pas après avoir utilisé les paramètres de production, au lieu d'essayer de deviner.
Stefan Dragnev

4
En effet, ce n'est pas quelque chose à errer dans le noir. Regardez simplement le message d'erreur que vous verriez normalement en utilisant cette méthode. Dans mon cas, il me manquait un paramètre différent dans mon settings.py que mon application recherchait. Tout ce dont j'avais besoin était le journal pour suivre cela. Une remarque importante: j'ai ajouté / path / to / my / django / avant le 'mysite.log' comme indiqué dans l'exemple de documents: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
J'ai passé des heures à chercher une solution, inutile. selon cette réponse, utilisez simplement la journalisation et vous devriez avoir votre problème, c'est la meilleure réponse. Merci OP!
Stack

Mes erreurs de serveur ne semblent pas produire de journaux! J'ai essayé diverses configurations de journalisation en vain. Des idées?
cammil

5
Je vous remercie! Cela a résolu mon erreur. Il s'avère que j'avais besoin d'exécuter collectstatic pour collecter des actifs statiques à partir d'un package.
themessup

33

J'ai rencontré le même problème récemment dans Django 2.0. J'ai pu comprendre le problème en définissant DEBUG_PROPAGATE_EXCEPTIONS = True. Voir ici: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

Dans mon cas, l'erreur était ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. J'ai corrigé cela en exécutant localement python manage.py collectstatic.


Je fais la même chose mais collectstatic ne l'a pas réglé pour moi. Avez-vous reçu une "erreur impossible à atteindre"? Dans ce cas, comment avez-vous résolu le problème?
Kavi Vaidya

23

Dans mon cas, la lecture de documents d'applications tierces m'a bien sauvé.

Le coupable? django_compressor

j'ai eu

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

DEBUG = True m'a toujours donné 500. Pour le réparer, j'avais besoin d'une ligne dans mes paramètres pour le faire fonctionner

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

Merci, c'est la raison pour laquelle cela n'a pas fonctionné pour moi, mais cette ligne ne désactive-t-elle pas django_compressor de faire son travail?
Fanckush

1
@Fanckush Nope. Aucun mal n'est impliqué. django-compressor.readthedocs.io/en/latest/settings/… Le compresseur ferait toujours parfaitement son travail! Compressez simplement toutes vos statistiques (comme css), de sorte que le réglage est donc inutile car vos actifs sont déjà compressés
KhoPhi

13

À droite, dans Django 1.5 si DEBUG = False, configurez ALLOWED_HOSTS, en ajoutant des domaines sans le numéro de port. exemple:

ALLOWED_HOSTS = ['localhost']

Pour une raison quelconque, l'utilisation de «localhost» n'a pas fonctionné pour moi. J'ai dû utiliser l'IP '127.0.0.1' à la place. J'ai également pu utiliser «*» si vous paniquez et que vous voulez simplement que cela fonctionne. Cependant, je ne conseillerais pas de le faire en production. OSX exécutant Django 1.4.20
BlakePetersen

11

Vous devez également vérifier vos URL partout. Lorsque le DEBUGest défini sur False, toutes les URL sans suivi /sont traitées comme un bogue, contrairement à ce que vous avez DEBUG = True, auquel cas Django ajoutera /partout où il manque. Donc, en bref, assurez-vous que tous les liens se terminent par une barre oblique PARTOUT.


3
utilisez simplement la balise reverse et url et tout
ira

le paramètre DEBUG=Falsepeut également révéler des erreurs d'importation: stackoverflow.com/questions/25676453/…
ecoe

même des liens vers des actifs js et css?
amchugh89

@ amchugh89: non, juste des URL "django"
webzy

1
Mon problème est que whitenoise n'a pas pu trouver d'image et a lancé ValueError. Je ne pouvais pas non plus le trouver, mais je ne savais pas comment dire au blanc de ne pas le chercher. J'ai donc désactivé whitenoise, utilisé le service statique django et maintenant je peux exécuter debug = False dans prod. Évidemment pas idéal :(
amchugh89

7

J'ai une histoire hilarante pour tous. Après avoir atteint cette page, j'ai dit "Eureka! Je suis sauvé. Cela DOIT être mon problème." J'ai donc inséré la ALLOWED_HOSTSliste requise dans setting.py et ... rien. Même vieille erreur 500. Et non, ce n'est pas faute de fichier 404.html.

Donc, pendant 2 jours, je me suis occupé de théories sauvages, telles que cela avait quelque chose à voir avec le service de fichiers statiques (comprenez que je suis un noob et que les noobs ne savent pas ce qu'ils font).

Alors c'était quoi? C'est maintenant M. Modérateur que nous arrivons à un conseil utile. Alors que mon développement Django est la version 1.5.quelque chose, ma version de serveur de production est 1.5.quelque chose + 1 ... ou peut-être plus 2. Peu importe. Et donc après avoir ajouté le ALLOWED_HOSTSà la version de bureau de settings.py , qui manquait ce que hwjp demandait --- une "valeur par défaut dans settings.py, peut-être avec un commentaire explicatif" --- j'ai fait la même chose sur le serveur de production avec le domaine approprié pour cela.

Mais je n'ai pas remarqué que sur le serveur de production avec la dernière version de Django, il y avait une valeur par défaut dans settings.py avec un commentaire explicatif. C'était bien en dessous de l'endroit où j'ai fait mon entrée, hors de vue sur le moniteur. Et bien sûr, la liste était vide. D'où ma perte de temps.


1
j'avais exactement le même motif hilarant!, sauf qu'il n'est devenu hilarant qu'après avoir trouvé cela, merci. avant cela, c'était tout simplement frustrant
binithb

Quelque chose qui aide dans tout cela est d'utiliser un local_settings.pypour chaque environnement, puis de l'importer dans settings.py.
nicorellius

1
ce que j'aime faire, c'est avoir un répertoire settings / au lieu d'un settings.py. Dans ce répertoire, vous pouvez avoir des fichiers .py distincts pour différents environnements et un base.py pour les paramètres généraux. Les paramètres dépendants de la production peuvent ensuite commencer par importer * à partir des paramètres de base, et simplement remplacer tout ce dont ils ont besoin pour remplacer. En outre, l' initialisation requise .py nécessaire pour transformer ces paramètres / répertoire en un module valide, peut d'abord importer à partir de base.py, puis essayer d'importer à partir d'un local.py (qui n'existerait que localement). cela signifierait que vous n'avez pas besoin de spécifier les paramètres locaux manuellement
mephisto

7

Compléter la réponse principale
Il est ennuyeux de changer les constantes globales ALLOWED_HOSTS et DEBUG settings.pylors du passage du développement à la production. J'utilise ce code pour définir ces paramètres automatiquement:

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

Si vous utilisez macOS, vous pouvez écrire un code plus générique:

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

6

Pour ce que ça vaut - j'obtenais un 500 avec DEBUG = Falsesur certaines pages seulement. Retracer l'exception avec pdb a révélé un atout manquant (je soupçonne que la {% static ... %}balise de modèle était le coupable du 500.


1
C'était aussi mon problème, le modèle de base auquel la page 404 personnalisée faisait référence utilisait la balise statique mais n'incluait pas le {% load static%} en haut. Je ne l'ai pas remarqué ailleurs car mes autres modèles avaient cette ligne mais il est logique de la mettre de toute façon dans la base car elle fait référence à des fichiers statiques partout.
krischan

2
Même solution ici - j'utilisais staticpour inclure un fichier CSS qui n'existait pas.
Phil Gyford

5

J'ai fait face au même problème quand je l'ai fait DEBUG = FALSE. Voici une solution consolidée comme dispersée dans les réponses ci-dessus et dans d'autres articles.

Par défaut, dans settings.py nous avons ALLOWED_HOSTS = []. Voici les modifications possibles que vous devrez apporter en ALLOWED_HOSTSvaleur selon le scénario pour vous débarrasser de l'erreur:

1: Votre nom de domaine:

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

2: Votre IP de serveur déployée si vous n'avez pas encore de nom de domaine (ce qui était mon cas et fonctionnait comme un charme):

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

3: Si vous testez sur un serveur local, vous pouvez modifier votre settings.pyou en settings_local.pytant que:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Vous pouvez également fournir «*» dans la ALLOWED_HOSTSvaleur, mais ce n'est pas recommandé dans l'environnement de production pour des raisons de sécurité:

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

J'ai également publié une solution détaillée sur mon blog que vous souhaiterez peut-être consulter.


5

ALLOWED_HOSTS n'est PAS le seul problème, pour moi j'ai dû faire un 404.html et le mettre dans le niveau de base de mes modèles (pas au niveau de l'application) - En outre, vous pouvez faire une vue 404 et ajouter une URL 404handler mais je pense que c'est optionnel. 404.html l'a corrigé

dans mainproject.urls

handler404 = 'app.views.custom_404'

dans app.views

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

puis créez un modèle / 404.html modèle

a obtenu cela d'un autre poste S / O que je ne peux pas le trouver

ÉDITER

aussi, j'obtiens 500 erreurs lorsque je sers des actifs avec du bruit blanc. Je ne pouvais pas comprendre cela pour la vie de moi, l'erreur était ValueError de whitenoise ne pouvant pas trouver un actif que je ne pouvais pas trouver non plus, a dû aller avec Django par défaut servant pour l'instant


8
J'ai eu le même problème avec le bruit blanc. python manage.py collectstaticl'a corrigé.
Eugene Pakhomov

1
@ amchungh89 vous êtes un épargnant de vie! Merci d'avoir signalé cela.
Deepak Sharma

5

Je cherchais et testais plus sur ce problème et je me suis rendu compte que les répertoires de fichiers statiques spécifiés dans settings.py peuvent être une cause de cela, donc d'abord, nous devons exécuter cette commande

python manage.py collectstatic

dans settings.py, le code devrait ressembler à ceci:

STATIC_URL = '/static/'

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

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

3

Je sais que c'est une très vieille question, mais je pourrais peut-être aider quelqu'un d'autre. Si vous rencontrez une erreur 500 après avoir défini DEBUG = False, vous pouvez toujours exécuter le serveur run.py manage.py dans la ligne de commande pour voir les erreurs qui n'apparaissent pas dans les journaux d'erreurs Web.


2

C'est la mi-2019 et j'ai fait face à cette erreur après quelques années de développement avec Django. M'a dérouté pendant une nuit entière! Il n'était pas autorisé à héberger (ce qui devrait jeter un 400), tout le reste a été vérifié, a finalement fait une journalisation des erreurs uniquement pour découvrir que certains fichiers manquants / ou falsifiés manifestes (après collectstatic) étaient vissés avec la configuration. Pour faire court, pour ceux qui sont perplexes ET AINSI HAPPEN UTILISENT WHITENOISE OU LE BACK-END DJANGO STATICFILE AVEC CACHE (fichiers statiques manifestes), c'est peut-être pour vous.

  1. Assurez-vous de tout configurer (comme je l'ai fait pour le backend whitenoise ... les backends django continuent de lire) http://whitenoise.evans.io/en/stable/django.html

  2. Si le code d'erreur 500 vous abat toujours, notez vos paramètres.STATICFILES_STORAGE.

Réglez-le sur l'un ou l'autre (pour un backend à bruit blanc avec compression)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

ou (laisser comme django par défaut)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Dans l'ensemble, LE PROBLÈME semblait provenir du fait que ce cache blanc + backend de compression ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

ou le propre backend de mise en cache du django ->

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

... n'a pas très bien fonctionné pour moi, car mon CSS faisait référence à d'autres sources qui peuvent être mélangées lors de la mise en cache collectstatic / backend. Ce problème est également potentiellement mis en évidence dans http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot


1

Je pense que cela pourrait également être les paramètres du serveur http. Le mien est toujours cassé et avait ALLOWED_HOSTS tout le temps. Je peux y accéder localement (j'utilise gunicorn), mais pas via le nom de domaine lorsque DEBUG = False. lorsque j'essaie d'utiliser le nom de domaine, il me donne alors l'erreur, ce qui me fait penser que c'est un problème lié à nginx.

Voici mon fichier de conf pour 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;
}

mon fichier de configuration gunicorn est le suivant: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: application
user2868304

mon problème est maintenant résolu, j'utilisais le script gunicorn_django et il me donnait des messages obsolètes. Je ne sais toujours pas pourquoi cela a fonctionné localement, n'a pas changé ma configuration nginx, j'ai juste changé l'ancien script pour utiliser gunicorn et utiliser le module wsgi: application à la place et cela fonctionne à nouveau. Gunicorn lançait également des messages de dépréciation avant cela, mais rien de spécifique à mon problème.
user2868304

1

J'ai le même problème, dans mon cas, il a été causé par un script Commenté à l'intérieur de la balise body.

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

1

J'ai rencontré ce problème. Il s'avère que j'incluais dans le modèle, en utilisant la staticbalise de modèle, un fichier qui n'existait plus. Un regard dans les journaux m'a montré le problème.

Je suppose que ce n'est qu'une des nombreuses raisons possibles de ce type d'erreur.

Morale de l'histoire: enregistrez toujours les erreurs et vérifiez toujours les journaux.


1

Merci à @squarebear, dans le fichier journal, j'ai trouvé l'erreur: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>.

J'ai eu quelques problèmes avec mon application Django. J'ai supprimé la ligne
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'que j'ai trouvée dans la documentation du heroku.

J'ai également dû ajouter un répertoire supplémentaire (grâce à une autre réponse SO ) staticà la racine de l'application django comme myapp/staticsi je ne l'utilisais pas. Ensuite, l'exécution de la commande python manage.py collectstaticavant d'exécuter le serveur a résolu le problème. Enfin, cela a commencé à bien fonctionner.


Comment cela répond-il à la question d'origine?
Nick

1

J'ai commencé à obtenir le 500 pour debug = False sous la forme de

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

lors de l'augmentation de django.core.exceptions.ValidationError au lieu de l'augmentation de rest_framework.serializers.ValidationError

Pour être honnête, il levait déjà un 500 auparavant, mais en tant que ValidationError, avec debug = False, cela a changé en NoReverseMatch.


1

cela peut peut-être aider quelqu'un d'autre, dans mon cas, le problème avec le favicon manquant.


0

Je sais que c'est une vieille question, mais j'obtenais également une erreur 500 lorsque DEBUG = False. Après plusieurs heures, j'ai réalisé que j'avais oublié de terminer certains des liens dans mon base.html avec une barre oblique.


même les trucs css et js?
amchugh89

0

C'est vieux et mon problème a fini par être lié au problème mais pas pour l'OP mais ma solution est pour quiconque a essayé ce qui précède en vain.

J'avais un paramètre dans une version modifiée de Django pour réduire les fichiers CSS et JS qui ne fonctionnaient que lorsque DEBUG était désactivé. Mon serveur n'avait pas le minifieur CSS installé et a jeté l'erreur. Si vous utilisez Django-Mako-Plus, cela peut être votre problème.


0

Une petite chose à noter, si le tableau ne contient aucun, tous les hôtes autorisés suivants sont ignorés.

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 peu tard pour la fête, et bien sûr, il pourrait y avoir une légion de problèmes mais j'ai eu un problème similaire et il s'est avéré que j'avais {%%} des caractères spéciaux dans ma remarque html ...

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

0

J'ai eu une vue qui a jeté une erreur 500 dans debug = false mais a fonctionné dans debug = true. Pour tous ceux qui obtiennent ce genre de chose et les hôtes autorisés ne sont pas le problème, j'ai corrigé ma vue en mettant à jour la balise statique d'un modèle qui pointait vers le mauvais emplacement.

Je suggérerais donc simplement de vérifier que les liens et les balises sont hermétiques dans tous les modèles utilisés, peut-être que certaines choses passent à travers le net lors du débogage mais donnent des erreurs de production.


0

J'ai trouvé une autre cause de l'erreur 500 lorsque DEBUG = False. J'utilise l' compressorutilitaire Django et notre ingénieur frontal a ajouté des références aux fichiers de polices à l' intérieur d' un compress cssbloc dans un modèle Django. Comme ça:

{% 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 solution était de déplacer le lien vers le ttffichier sous la endcompressligne.


0

J'ai eu un problème similaire à celui-ci et je vais vous expliquer comment j'ai résolu le mien car il se pourrait que quelqu'un éprouve également la même chose.

Dans mon cas, l'erreur est due au fait que le serveur n'a pas trouvé de fichiers statiques sur la page d'accueil.

Assurez-vous donc que l'erreur se produit uniquement dans le indexou se produit sur une autre page. Si le problème se produit uniquement dans l'index, vous devez probablement vérifier les fichiers statiques. Je recommande d'ouvrir la console de prévisualisation Chrome et de rechercher d'éventuelles erreurs.

Dans mon cas, le serveur n'a pas pu trouver favicon.icoet deux autres CSS.

Pour résoudre ce problème, je suis passé python manage.py collectstaticet cela a fonctionné.


0

Je sais que ce post est assez ancien mais il est toujours parfaitement pertinent aujourd'hui.

Pour ce que ça vaut - j'obtenais un 500 avec DEBUG = Falsepour toutes les pages de mon site.

Je n'ai eu aucune trace en débogage.

J'ai dû parcourir tous les liens statiques de mes modèles au sein de mon site et en trouver un / (barre oblique) devant ma source d'image. {% statique ...%}. Cela a provoqué l'erreur 500 DEBUG = Falsemais a parfaitement fonctionné Debug = Truesans erreur. Très ennuyant! Être averti! Beaucoup d'heures perdues à cause d'une barre oblique ...


0

Vous voudrez peut-être exécuter python manage.py collectstaticaprès avoir défini DEBUG = Falseet ALLOWED_HOSTS = ['127.0.0.1']entré settings.py. Après ces deux étapes, mon application Web a bien fonctionné sur mon serveur local, même avec DEBUG = False mode.

BTW J'ai ces paramètres 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'

Je suppose que le réglage du bruit peut avoir quelque chose à voir avec la commande collectstatic.


-3

Ok après avoir essayé tellement de choses, la bonne solution est ...

vous devez définir DEBUG = 'FALSE'non Falseou FALSE, mais 'FALSE'avec''


Je pense que «FALSE» est une chaîne, donc elle est égale à True, c'est pourquoi elle n'obtient pas d'erreur.
apet
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.