Establecer DEBUG = False causa 500 Error

298

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 debuga 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',
)
zhiguo.wang
fuente
Sí,
agregué el
¿Tiene 500.html y 404.html y 403.html archivos en su lugar? Creo recordar haber tenido un problema con un proyecto implementado que no tenía esos archivos en la raíz de mi directorio de plantillas.
esse
Si su sitio está generando un error 500, debería haber alguna información en el registro de apache, es posible que desee pasar un fragmento del final del archivo de registro de errores para que la gente lo vea.
esse
87
Es posible que desee cambiar su SECRET_KEY ahora que está disponible públicamente ...
Fraxtil
1
Esta no es la respuesta para todos. Como se muestra a continuación en stackoverflow.com/a/37218484/4028977 , podría haber muchas razones por las cuales esto está ocurriendo. Con un simple registro puede averiguarlo sin conjeturas.
Rob

Respuestas:

413

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:

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

Agregue su host aquí como ['www.beta800.net']o ['*']para una prueba rápida, pero no lo use ['*']para producción .

Ric
fuente
32
Wow, esto nos mordió duro. Realmente apesta que esta configuración esté enterrada en los documentos. Nuestro sitio de producción no funcionaría con DEBUG = False. ¡Gracias por señalar esto!
Shreddd
44
Más información sobre los problemas de seguridad que introdujeron esta configuración: ataques prácticos de encabezado de host HTTP . Definitivamente te convencerá de no usarlo ['*']en producción.
gertvdijk
44
licenciado en Derecho. molesto que ni siquiera lo peguen como valor predeterminado en settings.py, tal vez con un comentario expansivo ...
hwjp
77
¡A veces me pregunto por qué Django se está volviendo cada vez más retrasado! Seguramente esos tipos son mucho mejores programadores que yo, pero realmente no entiendo la decisión de "arreglar" las vulnerabilidades a nivel de aplicación, cuando el movimiento real y limpio sería configurar el servidor correctamente. Lo mismo ocurre con el "almacenamiento en caché de plantillas" y las "conexiones persistentes" ... Código inútil que nunca se utilizará en un sitio web serio; ¡Todavía se presenta como el santo grial de la programación! Tal vez solo soy yo, ¡me he equivocado antes!
StefanNch
3
No importa, encontré el problema. Estaba relacionado con django-pipelineel comportamiento de cuando la estática aún no se ha recopilado. Como consejo general, colocar un punto de interrupción en el handle_uncaught_exceptionmétodo de Django lo ayudará a descubrir qué está pasando aquí.
Pieter
51

Sé que es tarde, pero terminé aquí con una búsqueda de mi error 500 DEBUG=False, en mi caso resultó ser el ALLOWED_HOSTSpero estaba usando os.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 cuando 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',
        },
    }
}
squareborg
fuente
16
Esta debería ser la respuesta aceptada. Es mucho más útil simplemente preguntarle al marco en sí qué está mal después de usar la configuración de producción, en lugar de tratar de adivinar.
Stefan Dragnev
44
De hecho, esto no es algo para pasear en la oscuridad. Solo mira el mensaje de error que normalmente verías usando este método. En mi caso, me faltaba una configuración diferente en settings.py que mi aplicación estaba buscando. Todo lo que necesitaba era el registro para rastrear esto. Una nota importante: agregué / path / to / my / django / antes de 'mysite.log' como se muestra en el ejemplo de docs: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob
44
He pasado horas buscando una solución, inútil. de acuerdo con esta respuesta, solo use el registro y debería tener su problema, esta es la mejor respuesta. Gracias OP!
Pila
¡Mis errores de servidor no parecen producir ningún registro! He intentado varias configuraciones de registro en vano. ¿Algunas ideas?
cammil
55
¡Gracias! Esto resolvió mi error. Resulta que necesitaba ejecutar collectstatic para recopilar algunos activos estáticos de un paquete.
ThemeSup
33

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-exceptions

En mi caso, el error fue ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Lo arreglé ejecutando localmente python manage.py collectstatic.

Kyle Gibson
fuente
Voy a lo mismo pero colectstatic no me lo solucionó. ¿Recibió un error "no se puede alcanzar"? En ese caso, ¿cómo lo arreglaste?
Kavi Vaidya
23

En mi caso, leer documentos de aplicaciones de terceros me salvó correctamente.

¿El culpable? django_compressor

yo tenía

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

DEBUG = True siempre me dio 500. Para solucionarlo, necesitaba una línea en mi configuración para que funcionara

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)
KhoPhi
fuente
Gracias, esa fue la razón por la que no funcionó para mí, pero ¿esa línea no impide que django_compressor haga su trabajo?
Fanckush el
1
@ Fanckush Nope. No hay daño involucrado. django-compressor.readthedocs.io/en/latest/settings/… ¡ Compressor todavía estaría haciendo su trabajo perfectamente! Simplemente comprimir todos sus estática (como CSS), por lo que el ajuste es por lo tanto inútil como sus activos ya están comprimidos
KhoPhi
13

Correcto, en Django 1.5 si DEBUG = False, configure ALLOWED_HOSTS, agregando dominios sin el número de puerto. ejemplo:

ALLOWED_HOSTS = ['localhost']
tonyprr
fuente
Por alguna razón, usar 'localhost' no funcionó para mí. Tuve que usar la IP '127.0.0.1' en su lugar. También pude usar '*' si estás volviendo loco y solo quieres que funcione. Sin embargo, no recomendaría hacerlo en producción. OSX ejecuta Django 1.4.20
BlakePetersen
11

También debe verificar sus URL en todo el lugar. Cuando DEBUGse establece en False, todas las URL sin seguimiento /se tratan como un error, a diferencia de cuando lo ha hecho DEBUG = 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.

webzy
fuente
3
solo use la etiqueta reverse y url y debería estar bien
maazza
la configuración también DEBUG=Falsepuede revelar errores de importación: stackoverflow.com/questions/25676453/…
ecoe
incluso enlaces a activos js y css?
amchugh89
@ amchugh89: no, solo URL "django"
webzy
1
Mi problema es que whitenoise no pudo encontrar alguna imagen y arrojó ValueError. Tampoco pude encontrarlo, pero no sabía cómo decirle a whitenoise que no lo buscara. Así que apagué whitenoise, utilicé el servicio estático django y ahora puedo ejecutar debug = False en prod. Obviamente no es ideal :(
amchugh89
7

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_HOSTSlista 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_HOSTSversió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.

Mike O'Connor
fuente
1
¡Tenía exactamente el mismo patrón hilarante!, excepto que se volvió hilarante solo después de encontrar esto, gracias. antes de eso era simplemente frustrante
binithb
Algo que ayuda en todo esto es usar un local_settings.pypara cada entorno y luego importarlo settings.py.
nicorellius
1
lo que me gusta hacer es tener un directorio settings / en lugar de settings.py. En este directorio, puede tener archivos .py separados para diferentes entornos y un base.py para configuraciones generales. La configuración dependiente de la producción puede comenzar importando * desde la configuración base y simplemente anular lo que sea necesario. Además, el init .py requerido necesitaba convertir esa configuración / directorio en un módulo válido, primero puede importar desde base.py, y luego intentar importar desde un local.py (que solo existiría localmente). eso significaría que no es necesario especificar la configuración local manualmente
Mephisto
7

Complementando la respuesta principal
Es molesto cambiar las constantes globales ALLOWED_HOSTS y DEBUG settings.pyal cambiar entre desarrollo y producción. Estoy usando este código para establecer esta configuración automáticamente:

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 usa macOS, podría escribir un código más genérico:

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

Por lo que vale, obtuve un 500 con solo DEBUG = Falseen 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.

usuario316054
fuente
1
Este también fue mi problema, la plantilla base a la que hacía referencia la página 404 personalizada usaba la etiqueta estática pero no incluía el {% load static%} en la parte superior. No lo noté en otra parte porque mis otras plantillas tenían esta línea, pero tiene sentido ponerla en la base de todos modos, ya que se refiere a archivos estáticos en todo el lugar.
krischan
2
La misma solución aquí: estaba usando staticpara incluir un archivo CSS que no existía.
Phil Gyford el
5

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 en ALLOWED_HOSTSvalor según el escenario para deshacerse del error:

1: Su nombre de dominio:

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

2: Su IP de servidor implementada si aún no tiene un nombre de dominio (que fue mi caso y funcionó de maravilla):

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

3: Si está probando en un servidor local, puede editar su settings.pyo settings_local.pycomo:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: También puede proporcionar '*' en el ALLOWED_HOSTSvalor, pero no se recomienda en el entorno de producción por razones de seguridad:

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

También he publicado una solución detallada en mi blog que puede consultar.

Ali Raza Bhayani
fuente
5

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

handler404 = 'app.views.custom_404'

en vistas de la aplicación

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

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

amchugh89
fuente
8
Tuve el mismo problema con whitenoise. python manage.py collectstaticarreglado.
Eugene Pakhomov
1
@ amchungh89 eres un salvavidas! Gracias por señalar eso.
Deepak Sharma
5

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

python manage.py collectstatic

en settings.py, el código debería verse así:

STATIC_URL = '/static/'

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

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Edison Urquijo
fuente
3

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.

n0grip
fuente
2

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.

  1. Asegúrese de configurar todo (como hice para el backend de whitenoise ... django backends sigue leyendo) http://whitenoise.evans.io/en/stable/django.html

  2. 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)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

o (dejar como django predeterminado)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Con todo, EL PROBLEMA parecía provenir del hecho de que este caché de blanqueamiento + backend de compresión ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

o el propio backend de almacenamiento en caché de django ->

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

... 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

aaronlhe
fuente
1

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:

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;
}
usuario2868304
fuente
mi archivo de configuración de gunicorn es el siguiente: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: application
user2868304
mi problema ahora está resuelto, estaba usando el script gunicorn_django y me estaba dando mensajes obsoletos. Todavía no estoy seguro de por qué funcionó localmente, no cambió mi configuración de nginx, solo cambié el script anterior para usar gunicorn y usar el módulo de aplicación wsgi: en su lugar, funciona de nuevo. Gunicorn estaba lanzando algunos mensajes de desaprobación antes de esto también, pero nada específico para mi problema.
usuario2868304
1

Tengo el problema similar, en mi caso fue causado por tener un script comentado dentro de la etiqueta del cuerpo.

<!--<script>  </script>-->
Edison Urquijo
fuente
1

Me encontré con este problema. Resulta que estaba incluyendo en la plantilla, usando la staticetiqueta 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.

Nishant George Agrwal
fuente
1

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 ) staticen la raíz de la aplicación django como myapp/staticsi no lo estuviera usando. Luego, ejecutar el comando python manage.py collectstaticantes de ejecutar el servidor resolvió el problema. Finalmente, comenzó a funcionar bien.

kHarshit
fuente
¿Cómo responde esto a la pregunta original?
Nick
1

Empecé a obtener el 500 para depuración = Falso en forma de

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

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.

DZet
fuente
1

Esto quizás ayude a alguien más, en mi caso el problema con el favicon faltante.

DAMAR225
fuente
0

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.

SethB
fuente
incluso las cosas css y js?
amchugh89
0

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.

Espartaco
fuente
0

Una pequeña cosa a tener en cuenta: si la matriz no tiene ninguno, todos los hosts permitidos posteriores se ignoran.

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

Ayush Goel
fuente
0

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 ...

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

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.

Tom
fuente
0

Encontré otra causa del error 500 cuando DEBUG = False. Uso la compressorutilidad Django y nuestro ingeniero front-end agregó referencias a archivos de fuentes dentro de un compress cssbloque en una plantilla de Django. Me gusta esto:

{% 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 solución fue mover el enlace al ttfarchivo debajo de la endcompresslínea.

nmgeek
fuente
0

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 indexo 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.icoy otros dos CSS.

Para arreglar esto pasé python manage.py collectstaticy funcionó.

Alison Andrade
fuente
0

Sé que esta publicación es bastante antigua, pero aún hoy es perfectamente relevante.

Por lo que vale, recibí 500 con DEBUG = Falsetodas 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 = Falsepero funcionó perfectamente bien Debug = Truesin errores. ¡Muy molesto! ¡Ten cuidado! Muchas horas de tiempo desperdiciadas debido a una barra diagonal ...

E Wilson
fuente
0

Es posible que desee ejecutar python manage.py collectstaticdespués de configurar DEBUG = Falsey ALLOWED_HOSTS = ['127.0.0.1']entrar settings.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.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # what i added
    'django.middleware.common.CommonMiddleware', # and so on...
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Supongo que tal vez la configuración de blanqueamiento tiene algo que ver con el comando colectivo.

Harry
fuente
-3

Ok, después de intentar tantas cosas, la solución correcta es ...

necesita establecer DEBUG = 'FALSE'no Falseo FALSE, pero 'FALSE'con''

xGoPox
fuente
Creo que 'FALSO' es una cadena, por lo que es igual a Verdadero, es por eso que no recibe un error.
Apet