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', '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í,
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 .


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

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.


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)

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']

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.


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.


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

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.


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.


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


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

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.


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


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;
}

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

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.


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.


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


1

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


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.


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.


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


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"/> -->

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.


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.


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


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


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.


-3

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

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


Creo que 'FALSO' es una cadena, por lo que es igual a Verdadero, es por eso que no recibe un error.
Apet
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.