django settings django-1.5

django - El ajuste DEBUG=False causa 500 Error



settings django-1.5 (24)

Una vez que cambie 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 la 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 en el registro de errores 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'', )


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

ALLOWED_HOSTS = [''localhost'']


ALLOWED_HOSTS NO es el único problema, para mí tuve que crear un 404.html y colocarlo en el nivel básico de mis plantillas (no en el nivel de la aplicación). Además, puedes crear una vista 404 y agregar una URL de 404 handlers, pero creo que eso Opcional. 404.html lo arregló

en mainproject.urls

handler404 = ''app.views.custom_404''

en app.views

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

luego hacer una plantilla / 404.html plantilla

obtuve esto de otra publicación de S / O que no puedo encontrar

EDITAR

Además, recibo 500 errores cuando sirvo activos con whitenoise. No pude entenderlo de por vida, el error fue que ValueError de whitenoise no pudo encontrar un activo que tampoco pude encontrar, tenía que ir con el servicio de django predeterminado por ahora.


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


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 anfitrión aquí como [''www.beta800.net''] o [''*''] para una prueba rápida, pero no use [''*''] para la producción .


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

¿El culpable? django_compresor

tuve

{% 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)


Encontré otra causa del error 500 cuando DEBUG = False. Utilizo la utilidad de compressor Django y nuestro ingeniero de front-end agregó referencias a archivos de fuentes dentro de un bloque compress css 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 archivo ttf debajo de la línea de endcompress .


Estaba buscando y probando más sobre este problema y me di cuenta de que los direcotiries de archivos estáticos especificados en settings.py pueden ser la causa de esto, así que primero, necesitamos ejecutar este comando

python manage.py collecstatic

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


Esto es antiguo y mi problema terminó por estar 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 los archivos CSS y JS que solo se ejecutaban cuando DEBUG estaba desactivado. Mi servidor no tenía instalado el minificador de CSS y lanzó el error. Si está utilizando Django-Mako-Plus, este podría ser su problema.


Gracias a @squarebear, en el archivo de registro, encontré el error: ValueError: The file ''myapp/styles.css'' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...> .

Tuve algunos problemas en mi aplicación django. Quité la linea
STATICFILES_STORAGE = ''whitenoise.django.GzipManifestStaticFilesStorage'' que encontré en la documentación de heroku.

También tuve que agregar un directorio adicional (gracias a otra respuesta SO ) static en la raíz de la aplicación django como myapp/static aunque no lo estaba usando. Luego, ejecutar el comando python manage.py collectstatic antes de ejecutar el servidor resolvió el problema. Finalmente, empezó a funcionar bien.


Me encontré con el mismo problema recientemente en Django 2.0. Pude resolver el problema configurando DEBUG_PROPAGATE_EXCEPTIONS = True . Consulte 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 .


Me encontré con este problema. Resulta que estaba incluido en la plantilla, usando la etiqueta de plantilla static , 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 registre los errores y siempre verifique los registros.


Me enfrenté al mismo problema cuando hice DEBUG = FALSE . Aquí hay una solución consolidada como se encuentra en las respuestas anteriores y otras publicaciones.

Por defecto, en settings.py tenemos ALLOWED_HOSTS = [] . Aquí hay posibles cambios que deberá realizar en el valor de ALLOWED_HOSTS según el escenario para eliminar el error:

1: Su nombre de dominio:

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

2: la IP de su servidor implementado si aún no tiene un nombre de dominio (que fue mi caso y funcionó a la perfección):

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

3: Si está realizando pruebas en un servidor local, puede editar su settings.py o settings_local.py como:

ALLOWED_HOSTS = [''localhost'', ''127.0.0.1'']

4: También puede proporcionar ''*'' en el valor ALLOWED_HOSTS , pero no se recomienda en el entorno de producción debido a razones de seguridad:

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

También he publicado una solución detallada en mi blog que tal vez quiera consultar.


Para lo que vale, recibí un 500 con DEBUG = False en algunas páginas. Rastrear la excepción con pdb reveló que faltaba un activo (sospecho que la etiqueta de plantilla {% static ... %} fue la culpable de los 500.


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 terminar algunos de los enlaces en mi base.html con una barra diagonal.


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 manage.py runserver en la línea de comandos para ver cualquier error que no aparezca en los registros de errores de la web.


Sé que esto es tarde pero terminé aquí con una búsqueda de mi error 500 con DEBUG=False , en mi caso resultó ser el ALLOWED_HOSTS pero estaba usando os.environ.get(''variable'') para poblar el hosts, no noté esto hasta que habilité el registro, puede registrar todos los errores para archivar 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'', }, } }


Si desea permitir que todos los hosts. Use ALLOWED_HOSTS = [''*'',] en lugar de ALLOWED_HOSTS = [''*'']


También debe comprobar sus URL en todo el lugar. Cuando DEBUG se establece en False , todas las URL sin seguimiento / se tratan como un error, a diferencia de cuando DEBUG = True , en cuyo caso Django agregará / todas partes que falta. Entonces, en resumen, asegúrese de que todos los enlaces terminen con una barra en TODAS PARTES.


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

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


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 ALLOWED_HOSTS lista requerida de ALLOWED_HOSTS en setting.py y ... nada. El mismo viejo error 500. Y no, no fue por falta de un archivo 404.html.

Así que durante 2 días me ocupé de teorías descabelladas, como que tenía algo que ver con el servicio de archivos estáticos (entiendo que soy un noob y noobs no sé 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 quizás más 2. Lo que sea. Y así, después de agregar ALLOWED_HOSTS a la versión de escritorio de settings.py , que carecía de lo que hwjp solicitaba --- 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 me di cuenta de 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.


Tuve una opinión que arrojó un error 500 en debug = false pero funcionó en debug = true. Para cualquier persona 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, sugiero que solo los enlaces y las etiquetas sean estancos en las plantillas utilizadas, tal vez ciertas cosas se deslicen en la red en la depuración, pero generan errores en la producción.


Un poco tarde para la fiesta, y por supuesto, podría haber una gran cantidad de problemas, pero tuve 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"/> -->


Una pequeña cosa a tener en cuenta, si la matriz no tiene ninguno, se ignorarán todos los hosts permitidos subsiguientes.

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


Complementando la respuesta principal.
Es molesto cambiar las constantes globales ALLOWED_HOSTS y DEBUG en settings.py al 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 usas macOS podrías 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: ...