330 votes

Paramètre DEBUG = False provoque des Erreur 500

Une fois que j'ai changer l' DEBUG = False, mon site va générer 500 (à l'aide de wsgi & manage.py runserver), et il n'y a pas d'erreur d'infos dans le journal des erreurs d'Apache et il va fonctionner normalement quand je change debug de True .

Je suis l'aide de Django 1.5 Et Python 2.7.3 voici Apache log d'accès et sans aucun journal dans le journal des erreurs d'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',
)

426voto

Ric Points 4781

Django 1.5 introduit les hôtes autorisés paramètre qui est nécessaire pour des raisons de sécurité. Un fichier de paramètres créés avec Django 1.5 a cette nouvelle section dont vous avez besoin pour ajouter:

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

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

13voto

tonyprr Points 119

À droite, dans Django 1.5 si DEBUG = False, configurer ALLOWED_HOSTS, l'ajout de domaines, sans le numéro de port. exemple:

ALLOWED_HOSTS = ['localhost']

13voto

webzy Points 61

Vous devez également vérifier votre Url de tous sur la place. Lorsque le DÉBOGAGE est défini à False, toutes les Url sans fin "/" sont considérés comme un bug, contrairement à lorsque vous avez DEBUG = True, auquel cas, Django va ajouter "/" partout où elle est absente. Donc, en résumé, assurez-vous que tous les liens à la fin avec un slash PARTOUT.

8voto

user316054 Points 108

Pour ce que ça vaut, j'ai été prendre une 500 avec debug=False sur certaines pages seulement. Remontant à l'exception avec apb a révélé un élément manquant (je soupçonne que la {% statique ... %} balise de modèle était le coupable pour la 500.

7voto

Mike O'Connor Points 81

J'ai une petite histoire pour tous. Après avoir atteint cette page, j'ai dit "Eureka! Je suis sauvé. Que DOIT être mon problème." J'ai donc inséré le nécessaire ALLOWED_HOSTS liste dans setting.py et... rien. La même vieille erreur 500. Et non, ce n'était pas par manque d'un 404.html fichier.

Donc pour 2 jours, j'ai s'active moi-même avec les théories, comme celle qu'il avait quelque chose à faire avec de servir les fichiers statiques (comprendre que je suis un noob et les noobs ne savent pas ce qu'ils font).

Alors, quel était-il? Il est maintenant Monsieur le Modérateur, que nous en venons à une astuce utile. Alors que mon développement Django est la version 1.5.quelque chose, mon serveur de production version 1.5.quelque chose de+1... ou peut-être plus de 2. Quoi que ce soit. Et donc après j'ai ajouté le ALLOWED_HOSTS à la version de bureau de settings.py, qui manquait de ce hwjp demandé--- une "valeur par défaut dans settings.py peut-être avec un commentaire explicatif"--- j'ai fait de même sur le serveur de production avec le bon domaine.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X