Una vez que cambie el DEBUG = False
, mi sitio generará 500 (usando wsgi & manage.py runserver), y no hay información de error en el registro de errores de Apache y se ejecutará normalmente cuando cambie debug
a True
.
Estoy usando Django 1.5 y Python 2.7.3 aquí está el registro de acceso de Apache y sin ningún registro de registro de error de 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"
Aquí está mi archivo de configuración:
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
fuente
fuente
Respuestas:
Django 1.5 introdujo la configuración de hosts permitidos que se requiere por razones de seguridad. Un archivo de configuración creado con Django 1.5 tiene esta nueva sección que debe agregar:
Agregue su host aquí como
['www.beta800.net']
o['*']
para una prueba rápida, pero no lo use['*']
para producción .fuente
['*']
en producción.django-pipeline
el comportamiento de cuando la estática aún no se ha recopilado. Como consejo general, colocar un punto de interrupción en elhandle_uncaught_exception
método de Django lo ayudará a descubrir qué está pasando aquí.Sé que es tarde, pero terminé aquí con una búsqueda de mi error 500
DEBUG=False
, en mi caso resultó ser elALLOWED_HOSTS
pero estaba usandoos.environ.get('variable')
para llenar los hosts, no lo noté hasta que habilité el registro, puedes registre todos los errores en el archivo con lo siguiente y se registrará incluso cuandoDEBUG=False
:fuente
Encontré el mismo problema recientemente en Django 2.0. Pude resolver el problema configurando
DEBUG_PROPAGATE_EXCEPTIONS = True
. Ver aquí: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptionsEn mi caso, el error fue
ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'
. Lo arreglé ejecutando localmentepython manage.py collectstatic
.fuente
En mi caso, leer documentos de aplicaciones de terceros me salvó correctamente.
¿El culpable? django_compressor
yo tenía
DEBUG = True
siempre me dio 500. Para solucionarlo, necesitaba una línea en mi configuración para que funcionarafuente
Correcto, en Django 1.5 si DEBUG = False, configure ALLOWED_HOSTS, agregando dominios sin el número de puerto. ejemplo:
fuente
También debe verificar sus URL en todo el lugar. Cuando
DEBUG
se establece enFalse
, todas las URL sin seguimiento/
se tratan como un error, a diferencia de cuando lo ha hechoDEBUG = True
, en cuyo caso Django se agregará en/
todas partes donde falte. En resumen, asegúrese de que todos los enlaces terminen con una barra diagonal EN TODAS PARTES.fuente
DEBUG=False
puede revelar errores de importación: stackoverflow.com/questions/25676453/…Tengo una historia hilarante para todos. Después de llegar a esta página dije "¡Eureka! Estoy salvado. Ese DEBE ser mi problema". Así que inserté la
ALLOWED_HOSTS
lista requerida en setting.py y ... nada. El mismo error 500 anterior. Y no, no fue por falta de un archivo 404.html.Así que durante 2 días me ocupé de teorías salvajes, como que tenía algo que ver con servir archivos estáticos (entiendo que soy un novato y los novatos no saben lo que están haciendo).
Entonces, ¿qué fue? Ahora es el Sr. Moderador que llegamos a un consejo útil. Mientras que mi desarrollo Django es la versión 1.5.algo, mi versión del servidor de producción es 1.5.algo + 1 ... o tal vez más 2. Lo que sea. Y así, después de agregar la
ALLOWED_HOSTS
versión de escritorio de settings.py , que carecía de lo que hwjp solicitó --- un "valor predeterminado en settings.py, tal vez con un comentario explicativo" --- Hice lo mismo en el servidor de producción con El dominio adecuado para ello.Pero no noté que en el servidor de producción con la versión posterior de Django había un valor predeterminado en settings.py con un comentario explicativo. Estaba muy por debajo de donde hice mi entrada, fuera de la vista en el monitor. Y, por supuesto, la lista estaba vacía. De ahí mi pérdida de tiempo.
fuente
local_settings.py
para cada entorno y luego importarlosettings.py
.Complementando la respuesta principal
Es molesto cambiar las constantes globales ALLOWED_HOSTS y DEBUG
settings.py
al cambiar entre desarrollo y producción. Estoy usando este código para establecer esta configuración automáticamente:Si usa macOS, podría escribir un código más genérico:
fuente
Por lo que vale, obtuve un 500 con solo
DEBUG = False
en algunas páginas. Rastrear la excepción con pdb reveló un activo faltante (sospecho que la{% static ... %}
etiqueta de plantilla fue la culpable de las 500.fuente
static
para incluir un archivo CSS que no existía.Me enfrenté al mismo problema cuando lo hice
DEBUG = FALSE
. Aquí hay una solución consolidada dispersa en las respuestas anteriores y otras publicaciones.Por defecto, en settings.py tenemos
ALLOWED_HOSTS = []
. Aquí hay posibles cambios que tendrá que hacer enALLOWED_HOSTS
valor según el escenario para deshacerse del error:1: Su nombre de dominio:
2: Su IP de servidor implementada si aún no tiene un nombre de dominio (que fue mi caso y funcionó de maravilla):
3: Si está probando en un servidor local, puede editar su
settings.py
osettings_local.py
como:4: También puede proporcionar '*' en el
ALLOWED_HOSTS
valor, pero no se recomienda en el entorno de producción por razones de seguridad:También he publicado una solución detallada en mi blog que puede consultar.
fuente
ALLOWED_HOSTS NO es el único problema, para mí tuve que hacer un 404.html y ponerlo en el nivel base de mis plantillas (no en el nivel de la aplicación). Además, puede hacer una vista 404 y agregar una URL de controlador 404, pero creo que eso es Opcional. 404.html lo arregló
en mainproject.urls
en vistas de la aplicación
luego haga una plantilla templates / 404.html
Recibí esto de otra publicación de S / O que no puedo encontrar
EDITAR
Además, obtengo 500 errores cuando sirvo activos con whitenoise. No pude resolver eso durante toda mi vida, el error fue que ValueError de whitenoise no pudo encontrar un activo que tampoco pude encontrar, tuve que ir con el servicio predeterminado de django por ahora
fuente
python manage.py collectstatic
arreglado.Estaba buscando y probando más sobre este problema y me di cuenta de que los directorios de archivos estáticos especificados en settings.py pueden ser la causa de esto, por lo tanto, debemos ejecutar este comando
en settings.py, el código debería verse así:
fuente
Sé que esta es una pregunta muy antigua, pero tal vez podría ayudar a alguien más. Si tiene un error 500 después de configurar DEBUG = False, siempre puede ejecutar el servidor de ejecución manage.py en la línea de comando para ver los errores que no aparecerán en los registros de errores web.
fuente
Es mediados de 2019 y me enfrenté a este error después de algunos años de desarrollo con Django. Me desconcertó por una noche entera! No se permitía el host (que debería arrojar un 400), todo lo demás se verificó, finalmente hizo un registro de errores solo para descubrir que algunos manifiestos de archivos estáticos faltantes / en mal estado (después del colectivo) estaban atornillando la configuración. Larga historia corta, para aquellos que están perplejos Y TAN SUCEDIDOS ESTÁN USANDO WHITENOISE O EL DJANGO STATICFILE BACKEND WITH CACHE (archivos estáticos manifiestos), tal vez esto sea para usted.
Asegúrese de configurar todo (como hice para el backend de whitenoise ... django backends sigue leyendo) http://whitenoise.evans.io/en/stable/django.html
Si el código de error 500 aún lo derriba, tome nota de su configuración. STATICFILES_STORAGE.
Ajústelo a cualquiera (para blanquear backend con compresión)
o (dejar como django predeterminado)
Con todo, EL PROBLEMA parecía provenir del hecho de que este caché de blanqueamiento + backend de compresión ->
o el propio backend de almacenamiento en caché de django ->
... no funcionó bastante bien para mí, ya que mi CSS hacía referencia a algunas otras fuentes que pueden estar mezcladas durante el almacenamiento en caché colectivo / backend. Este problema también se destaca potencialmente en http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot
fuente
Creo que también podría ser la configuración del servidor http. El mío todavía está roto y tenía ALLOWED_HOSTS todo el tiempo. Puedo acceder a él localmente (uso gunicorn), pero no a través del nombre de dominio cuando DEBUG = False. cuando intento usar el nombre de dominio, me da el error, así que me hace pensar que es un problema relacionado con nginx.
Aquí está mi archivo conf para nginx:
fuente
Tengo el problema similar, en mi caso fue causado por tener un script comentado dentro de la etiqueta del cuerpo.
fuente
Me encontré con este problema. Resulta que estaba incluyendo en la plantilla, usando la
static
etiqueta de plantilla, un archivo que ya no existía. Una mirada en los registros me mostró el problema.Supongo que esta es solo una de las muchas razones posibles para este tipo de error.
Moraleja de la historia: siempre registra los errores y siempre verifica los registros.
fuente
Gracias a @squarebear, en el archivo de registro, he encontrado el error:
ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...>
.Tuve algunos problemas en mi aplicación django.
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
Eliminé la línea que encontré de la documentación del heroku.También tuve que agregar un directorio adicional (gracias a otra respuesta SO )
static
en la raíz de la aplicación django comomyapp/static
si no lo estuviera usando. Luego, ejecutar el comandopython manage.py collectstatic
antes de ejecutar el servidor resolvió el problema. Finalmente, comenzó a funcionar bien.fuente
Empecé a obtener el 500 para depuración = Falso en forma de
al generar django.core.exceptions.ValidationError en lugar de elevar rest_framework.serializers.ValidationError
Para ser justos, ya estaba recaudando 500 antes, pero como ValidationError, con debug = False, esto cambió a NoReverseMatch.
fuente
Esto quizás ayude a alguien más, en mi caso el problema con el favicon faltante.
fuente
Sé que esta es una pregunta antigua, pero también recibí un error 500 cuando DEBUG = False. Después de varias horas, me di cuenta de que había olvidado finalizar algunos de los enlaces en mi base.html con una barra inclinada final.
fuente
Esto es antiguo y mi problema terminó relacionado con el problema, pero no para el OP, pero mi solución es para cualquier otra persona que haya intentado lo anterior sin éxito.
Tenía una configuración en una versión modificada de Django para minimizar archivos CSS y JS que solo se ejecutaban cuando DEBUG estaba desactivado. Mi servidor no tenía instalado el minificador de CSS y arrojó el error. Si está utilizando Django-Mako-Plus, este podría ser su problema.
fuente
Una pequeña cosa a tener en cuenta: si la matriz no tiene ninguno, todos los hosts permitidos posteriores se ignoran.
Django version 1.8.4
fuente
Un poco tarde para la fiesta, y por supuesto podría haber una legión de problemas, pero he tenido un problema similar y resultó que tenía {%%} caracteres especiales dentro de mi comentario html ...
fuente
Tenía una vista que arrojó un error 500 en debug = false pero funcionó en debug = true. Para cualquiera que tenga este tipo de cosas y Hosts Permitidos no es el problema, arreglé mi vista actualizando la etiqueta estática de una plantilla que apuntaba a la ubicación incorrecta.
Por lo tanto, sugeriría que simplemente comprobar que los enlaces y las etiquetas sean herméticos en cualquier plantilla utilizada, tal vez ciertas cosas se escapen a través de la red en la depuración pero dan errores en la producción.
fuente
Encontré otra causa del error 500 cuando DEBUG = False. Uso la
compressor
utilidad Django y nuestro ingeniero front-end agregó referencias a archivos de fuentes dentro de uncompress css
bloque en una plantilla de Django. Me gusta esto:La solución fue mover el enlace al
ttf
archivo debajo de laendcompress
línea.fuente
Tuve un problema similar a este e informaré cómo resolví el mío porque podría ser que alguien también esté experimentando lo mismo.
En mi caso, el error fue causado porque el servidor no estaba encontrando algunos archivos estáticos desde la página de inicio.
Así que asegúrese de que el error solo ocurra en la página
index
o en otra. Si el problema solo ocurre en el índice, probablemente deba verificar los archivos estáticos. Recomiendo abrir la consola de vista previa de Chrome y verificar cualquier error.En mi caso, el servidor no pudo encontrar
favicon.ico
y otros dos CSS.Para arreglar esto pasé
python manage.py collectstatic
y funcionó.fuente
Sé que esta publicación es bastante antigua, pero aún hoy es perfectamente relevante.
Por lo que vale, recibí 500 con
DEBUG = False
todas las páginas de mi sitio.No obtuve seguimiento cuando estaba en depuración.
Tuve que pasar por cada enlace estático en mis plantillas dentro de mi sitio y encontré uno / (barra diagonal) delante de mi fuente de imagen. {% static ...%}. Esto causó el error 500
DEBUG = False
pero funcionó perfectamente bienDebug = True
sin errores. ¡Muy molesto! ¡Ten cuidado! Muchas horas de tiempo desperdiciadas debido a una barra diagonal ...fuente
Es posible que desee ejecutar
python manage.py collectstatic
después de configurarDEBUG = False
yALLOWED_HOSTS = ['127.0.0.1']
entrarsettings.py
. Después de estos dos pasos, mi aplicación web funcionó bien en mi servidor local incluso con DEBUG = False mode.Por cierto tengo esta configuración en
settings.py
.Supongo que tal vez la configuración de blanqueamiento tiene algo que ver con el comando colectivo.
fuente
Ok, después de intentar tantas cosas, la solución correcta es ...
necesita establecer
DEBUG = 'FALSE'
noFalse
oFALSE
, pero'FALSE'
con''
fuente