Definir DEBUG = Falso causa 500 erros


298

Depois de alterar DEBUG = False, meu site gerará 500 (usando o wsgi & manage.py runserver) e não há informações de erro no log de erros do Apache e ele será executado normalmente quando eu mudar debugpara True.

Estou usando o Django 1.5 e Python 2.7.3, aqui está o log de acesso do Apache e sem nenhum log no log de erros do 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"

Aqui está o meu arquivo de configurações:

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

Sim, eu tenho adicionar 403 e 404 500 arquivo html em meus modelos dir
zhiguo.wang

Você possui os arquivos 500.html e 404.html e 403.html? Acho que me lembro de ter um problema com um projeto implantado que não tinha esses arquivos na raiz do meu diretório de modelos.
Esse

Se o seu site está gerando um erro 500, deve haver algumas informações no log do apache, convém passar um pedaço do final do arquivo de log de erros para as pessoas verem.
Esse

87
Você pode querer mudar a sua SECRET_KEY agora que está publicamente disponível ...
Fraxtil

1
Esta não é a resposta para todos. Como mostrado abaixo em stackoverflow.com/a/37218484/4028977 , pode haver muitos motivos pelos quais isso está ocorrendo. Com alguns registros simples, você pode descobrir sem adivinhações.
10377 Rob

Respostas:


413

O Django 1.5 introduziu a configuração de hosts permitidos, necessária por razões de segurança. Um arquivo de configurações criado com o Django 1.5 possui esta nova seção que você precisa adicionar:

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

Adicione seu host aqui como ['www.beta800.net']ou ['*']para um teste rápido, mas não use ['*']para produção .


32
Uau - isso nos mordeu com força. É realmente péssimo que essa configuração esteja oculta nos documentos. Nosso site de produção não funcionaria com DEBUG = False. Obrigado por apontar isto!!!
Shreddd 28/03

4
Mais sobre os problemas de segurança que introduziram essa configuração: Ataques práticos ao cabeçalho do host HTTP . Definitivamente o convencerá a não usar ['*']na produção.
Gtvdijk

4
bl. irritante que eles nem sequer colocá-lo em como um valor padrão no settings.py, talvez com um comentário expanatory ...
hwjp

7
Às vezes me pergunto por que o Django está se tornando cada vez mais retardado! Surpreendentemente, esses caras são programadores muito melhores do que eu, mas eu realmente não entendo a decisão de "corrigir" vulnerabilidades no nível do aplicativo, quando a ação real e limpa seria configurar o servidor corretamente. O mesmo vale para "cache de modelo" e "conexões persistentes" ... Código inútil que nunca será usado em um site sério; ainda é apresentado como o santo graal da programação! Talvez seja só eu, eu já estive errado antes!
27413 StefanNch #

3
Deixa pra lá, encontrou o problema. Foi relacionado ao django-pipelinecomportamento de quando a estática ainda não foi coletada. Como uma dica geral, colocar um ponto de interrupção no handle_uncaught_exceptionmétodo do Django ajudará você a descobrir o que está acontecendo aqui.
21316 Pieter

51

Sei que está atrasado, mas acabei aqui com uma pesquisa pelo meu erro 500. DEBUG=FalseNo meu caso, acabou sendo o ALLOWED_HOSTSmas eu estava usando os.environ.get('variable')para preencher os hosts, não percebi isso até ativar o log, você pode registre todos os erros para arquivar com o abaixo e ele registrará mesmo quando 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
Essa deve ser a resposta aceita. É muito mais útil simplesmente perguntar à própria estrutura o que está errado depois de usar as configurações de produção, em vez de tentar adivinhar.
Stefan Dragnev

4
Na verdade, isso não é algo para se vagar no escuro. Basta olhar para a mensagem de erro que você normalmente veria usando esse método. No meu caso, estava faltando uma configuração diferente em meu settings.py que meu aplicativo estava procurando. Tudo o que eu precisava era do log para rastrear isso. Uma observação importante: eu adicionei / path / a / my / django / antes do 'mysite.log', conforme mostrado no exemplo de documentos: docs.djangoproject.com/en/1.10/topics/logging/#examples
Rob

4
Passei horas procurando uma solução, não adianta. de acordo com esta resposta, basta usar o log e você deve ter o seu problema, esta é a melhor resposta. Obrigado OP!
Stack #

Os erros do meu servidor parecem não produzir nenhum registro! Eu tentei várias configurações de log sem sucesso. Alguma ideia?
Cammil

5
Obrigado! Isso resolveu meu erro. Acontece que eu precisava executar estática coletiva para coletar alguns ativos estáticos de um pacote.
themessup

33

Encontrei o mesmo problema recentemente no Django 2.0. Consegui descobrir o problema definindo DEBUG_PROPAGATE_EXCEPTIONS = True. Veja aqui: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

No meu caso, o erro foi ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'. Corrigi isso executando localmente python manage.py collectstatic.


Eu vou a mesma coisa, mas o colecionador não corrigiu isso para mim. Você recebeu um erro "não pode ser alcançado"? Nesse caso, como você corrigiu isso?
Kavi Vaidya

23

No meu caso, a leitura de documentos de aplicativos de terceiros me salvou adequadamente.

O culpado? django_compressor

eu tinha

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

DEBUG = True sempre me dava 500. Para consertar, eu precisava de uma linha nas minhas configurações para executá-lo

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)

Obrigado, foi por isso que não funcionou para mim, mas essa linha não desativa o django_compressor de fazer seu trabalho?
Fanckush

1
@Fanckush Nope. Nenhum dano está envolvido. django-compressor.readthedocs.io/en/latest/settings/… O compressor ainda faria seu trabalho perfeitamente! Basta comprimir todos os seus estática (como CSS), então essa definição é, portanto, inútil como seus ativos já estão compactados
KhoPhi

13

Certo, no Django 1.5, se DEBUG = False, configure ALLOWED_HOSTS, adicionando domínios sem o número da porta. exemplo:

ALLOWED_HOSTS = ['localhost']

Por qualquer motivo, usar 'localhost' não funcionou para mim. Eu tive que usar o IP '127.0.0.1'. Eu também era capaz de usar '*' se você está pirando e só quer que ele funcione. Eu não recomendaria isso na produção, no entanto. OSX executando o Django 1.4.20
BlakePetersen

11

Você também deve verificar seus URLs em todo o lugar. Quando o DEBUGestá definido como False, todos os URLs sem rastreamento /são tratados como um bug, diferente do que você tem DEBUG = True, nesse caso o Django anexará /todos os lugares que estiverem faltando. Portanto, em resumo, verifique se todos os links terminam com uma barra EM TODA PARTE.


3
basta usar tag reversa e url e você deve ser fino
maazza

A configuração também DEBUG=Falsepode revelar erros de importação: stackoverflow.com/questions/25676453/…
ecoe

até links para ativos js e css?
amchugh89

@ amchugh89: não, apenas URLs de "django"
webzy 26/11/15

1
Meu problema é que whitenoise não conseguiu encontrar alguma imagem e estava lançando ValueError. Eu também não consegui encontrá-lo, mas não sabia como dizer a whitenoise para não procurá-lo. Então eu desliguei o whitenoise, use o serviço estático do django e agora posso executar debug = False no prod. Obviamente não é o ideal :(
amchugh89

7

Eu tenho uma história hilariante para todos. Depois de chegar a esta página, eu disse: "Eureka! Estou salva. DEVE ser o meu problema." Então eu inseri a ALLOWED_HOSTSlista necessária em setting.py e ... nada. O mesmo erro antigo de 500. E não, não foi por falta de um arquivo 404.html.

Por dois dias, eu me ocupei com teorias malucas, como se isso tivesse algo a ver com a veiculação de arquivos estáticos (entenda que eu sou um noob e os noobs não sabem o que estão fazendo).

Então o que foi? Agora é o Sr. Moderador que chegamos a uma dica útil. Enquanto meu Django de desenvolvimento é a versão 1.5, a versão do servidor de produção é 1.5, + 1 ... ou talvez mais 2. Tanto faz. Então, depois que adicionei a ALLOWED_HOSTSversão para desktop do settings.py , que não tinha o que o hwjp solicitou - um "valor padrão em settings.py, talvez com um comentário explicativo" - fiz o mesmo no servidor de produção com o domínio apropriado para isso.

Mas não percebi que no servidor de produção com a versão posterior do Django havia um valor padrão em settings.py com um comentário explicativo. Foi bem abaixo de onde eu fiz minha entrada, fora da vista no monitor. E é claro que a lista estava vazia. Daí minha perda de tempo.


1
eu tinha exatamente o mesmo padrão hilário !, exceto que ele se tornou hilário somente depois que eu encontrei isso, obrigado. antes disso, era simplesmente frustrante
binithb 4/13/13

Algo que ajuda em tudo isso é usar um local_settings.pypara cada ambiente e depois importá-lo settings.py.
Nicorellius

1
o que eu gosto de fazer é ter um diretório settings / em vez de um settings.py. Nesse diretório, você pode ter arquivos .py separados para ambientes diferentes e um base.py para configurações gerais. As configurações dependentes da produção podem começar importando * das configurações básicas e simplesmente substituir o que elas precisarem. Além disso, o init .py necessário para transformar essas configurações / diretório em um módulo válido pode primeiro importar do base.py e depois tentar importar do local.py (que existiria apenas localmente). que significa que você não precisa especificar as configurações locais manualmente
mephisto

7

Complementando a resposta principal
É irritante alterar as constantes globais ALLOWED_HOSTS e DEBUG settings.pyao alternar entre desenvolvimento e produção. Estou usando esse código para definir essas configurações automaticamente:

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",]
    ...

Se você usa o macOS, pode escrever um código mais genérico:

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

6

Pelo que vale a pena - eu estava recebendo 500 com DEBUG = Falseapenas algumas páginas. O rastreamento da exceção com o pdb revelou um ativo ausente (suspeito que a {% static ... %}tag de modelo foi a culpada pelos 500.


1
Esse também era meu problema, o modelo base ao qual a página 404 personalizada estava fazendo referência usava a tag estática, mas não incluía {% load static%} na parte superior. Eu não notei isso em nenhum outro lugar porque meus outros modelos tinham essa linha, mas faz sentido colocá-la na base de qualquer maneira, pois se refere a arquivos estáticos em todo o lugar.
Krischan

2
Mesma solução aqui - eu estava usando staticpara incluir um arquivo CSS que não existia.
Phil Gyford

5

Eu enfrentei o mesmo problema quando o fiz DEBUG = FALSE. Aqui está uma solução consolidada, conforme dispersa nas respostas acima e em outras postagens.

Por padrão, em settings.py, temos ALLOWED_HOSTS = []. Aqui estão as possíveis alterações que você precisará fazer no ALLOWED_HOSTSvalor conforme o cenário para se livrar do erro:

1: Seu nome de domínio:

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

2: O IP do servidor implantado, se você ainda não possui um nome de domínio (que foi o meu caso e funcionou como um encanto):

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

3: Se você estiver testando no servidor local, poderá editar seu settings.pyou settings_local.pycomo:

ALLOWED_HOSTS = ['localhost', '127.0.0.1']

4: Você também pode fornecer '*' no ALLOWED_HOSTSvalor, mas isso não é recomendado no ambiente de produção devido a razões de segurança:

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

Também publiquei uma solução detalhada no meu blog que você pode consultar.


5

ALLOWED_HOSTS NÃO é o único problema, para mim eu tive que criar um 404.html e colocá-lo no nível básico dos meus modelos (não no nível do aplicativo). Além disso, você pode criar uma visualização 404 e adicionar um URL de manipulador 404, mas acho que isso opcional. 404.html corrigiu

em mainproject.urls

handler404 = 'app.views.custom_404'

em app.views

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

então crie um template templates / 404.html

recebi isso de outro post de S / O que não consigo encontrar

EDITAR

Além disso, recebo 500 erros quando sirvo ativos com branqueamento. Não foi possível descobrir isso para a minha vida, o erro foi ValueError, porque whitenoise não foi capaz de encontrar um ativo que eu também não consegui encontrar, tinha que ir com o django padrão servindo por enquanto


8
Eu tive o mesmo problema com whitenoise. python manage.py collectstaticconsertou.
Eugene Pakhomov

1
@ amchungh89 você é um salva-vidas! Thanx por apontar isso.
Deepak Sharma

5

Eu estava pesquisando e testando mais sobre esse problema e percebi que os diretórios de arquivos estáticos especificados em settings.py podem ser a causa disso, então, primeiro precisamos executar o comando

python manage.py collectstatic

em settings.py, o código deve se parecer com isso:

STATIC_URL = '/static/'

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

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

3

Sei que essa é uma pergunta super antiga, mas talvez eu possa ajudar outra pessoa. Se você estiver com um erro 500 após definir DEBUG = False, sempre poderá executar o manage.py runserver na linha de comandos para ver os erros que não aparecerão nos logs de erros da web.


2

Em meados de 2019, eu enfrentei esse erro após alguns anos de desenvolvimento com o Django. Me confundiu por uma noite inteira! Não foi permitido que o host (que deveria disparar 400), todo o restante do check-out, finalmente cometeu algum erro no log, apenas para descobrir que alguns manifestos de arquivos estáticos ausentes / ou bagunçados (depois do collectstatic) estavam atrapalhando a instalação. Para encurtar a história, para aqueles que estão perplexos E ACONTECENDO USANDO O WHITENOISE OU O DJANGO STATICFILE BACKEND WITH CACHE (arquivos estáticos manifestos), talvez seja para você.

  1. Certifique-se de configurar tudo (como eu fiz para o backend whitenoise ... os backend django continuam a ler mesmo assim) http://whitenoise.evans.io/en/stable/django.html

  2. Se o código de erro 500 ainda o abater, anote suas configurações.STATICFILES_STORAGE.

Defina-o como (para back-end whitenoise com compactação)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

ou (deixe como padrão do django)

STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage

Em suma, O PROBLEMA parecia vir do fato de que esse cache whitenoise + backend de compressão ->

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

ou o próprio backend de cache do django ->

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

... não funcionou muito bem para mim, pois meu css fazia referência a outras fontes que podem ser misturadas durante o cache de coleta / estática / back-end. Esse problema também está potencialmente destacado em http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot


1

Eu acho que também poderia ser as configurações do servidor http. O meu ainda está quebrado e teve ALLOWED_HOSTS o tempo todo. Eu posso acessá-lo localmente (eu uso o gunicorn), mas não através do nome de domínio quando DEBUG = False. quando tento usar o nome de domínio, ele me dá o erro, o que me faz pensar que é um problema relacionado ao nginx.

Aqui está o meu arquivo conf para o 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;
}

meu arquivo de configuração do gunicorn é o seguinte: #! / bin / bash cd / var / web / delicms_env / deli_cms / source ../bin/activate exec gunicorn --workers = 3 deli_cms.wsgi: application
user2868304

meu problema agora está resolvido, eu estava usando o script gunicorn_django e ele estava me dando mensagens obsoletas. Ainda não sei por que funcionou localmente, não mudei minha configuração do nginx, apenas alterei o script antigo para usar o gunicorn e usar o módulo wsgi: application em vez disso, e ele funciona novamente. Gunicorn estava lançando algumas mensagens de reprovação antes disso também, mas nada específico para o meu problema.
user2868304

1

Eu tenho o problema semelhante, no meu caso, foi causado por ter um script Comentado dentro da tag body.

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

1

Eu me deparei com esse problema. Acontece que eu estava incluindo no modelo, usando ostatic tag template, um arquivo que não existia mais. Uma olhada nos logs me mostrou o problema.

Eu acho que essa é apenas uma das muitas razões possíveis para esse tipo de erro.

Moral da história: sempre registre erros e sempre verifique os registros.


1

Graças a @squarebear, no arquivo de log, encontrei o erro: ValueError: The file 'myapp/styles.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage ...> .

Eu tive alguns problemas no meu aplicativo django. Eu removi a linha
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' que encontrei da documentação do heroku.

Eu também tive que adicionar um diretório extra (graças a outra resposta SO ) staticna raiz do aplicativo django, como myapp/staticse não estivesse usando. A execução do comando python manage.py collectstaticantes de executar o servidor resolveu o problema. Finalmente, começou a funcionar bem.


Como isso responde à pergunta original?
26417 Nick

1

Comecei a obter o 500 para debug = False na forma de

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

ao aumentar django.core.exceptions.ValidationError em vez de aumentar rest_framework.serializers.ValidationError

Para ser justo, ele já estava levantando 500 antes, mas como um ValidationError, com debug = False, isso foi alterado para NoReverseMatch.


1

isso talvez ajude outra pessoa, no meu caso, o problema com o favicon ausente.


0

Sei que essa é uma pergunta antiga, mas também estava recebendo um erro 500 quando DEBUG = False. Depois de várias horas, percebi que havia me esquecido de encerrar alguns dos links em meu base.html com uma barra final.


até o material css e js?
amchugh89

0

Isso é antigo e meu problema acabou relacionado ao problema, mas não para o OP, mas minha solução é para qualquer pessoa que tenha tentado o procedimento acima sem sucesso.

Eu tinha uma configuração em uma versão modificada do Django para reduzir os arquivos CSS e JS que só eram executados quando o DEBUG estava desativado. Meu servidor não tinha o minificador CSS instalado e lançou o erro. Se você estiver usando o Django-Mako-Plus, este pode ser o seu problema.


0

Um pequeno detalhe a ser observado: se a matriz não possuir nenhum, todos os hosts permitidos subsequentes serão ignorados.

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

Um pouco atrasado para a festa e, é claro, pode haver uma legião de problemas, mas eu tive um problema semelhante e constatou que eu tinha {%%} caracteres especiais em meu comentário html ...

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

0

Eu tinha uma visão que gerou um erro 500 em debug = false, mas funcionou em debug = true. Para quem está recebendo esse tipo de coisa e os Hosts permitidos não são o problema, corrigi minha visão atualizando a tag estática de um modelo que apontava para o local errado.

Portanto, sugiro que apenas verifique se os links e as tags são herméticos em todos os modelos usados, talvez algumas coisas passem pela rede em depuração, mas gerem erros na produção.


0

Encontrei outra causa do erro 500 quando DEBUG = False. Eu uso o compressorutilitário Django e nosso engenheiro de front-end adicionou referências a arquivos de fonte dentro de um compress cssbloco em um modelo do Django. Como isso:

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

A solução foi mover o link para o ttfarquivo abaixo da endcompresslinha.


0

Eu tive um problema semelhante a esse e relatarei como resolvi o meu, porque pode ser que alguém também esteja enfrentando o mesmo.

No meu caso, o erro foi causado porque o servidor não estava encontrando alguns arquivos estáticos na página inicial.

Portanto, verifique se o erro ocorre apenas no index ou ocorre em outra página. Se o problema está ocorrendo apenas no índice, muito provavelmente você precisará verificar os arquivos estáticos. Eu recomendo abrir o console de visualização do Chrome e verificar se há erros.

No meu caso, o servidor não conseguiu encontrar favicon.icoe mais dois CSS.

Para consertar isso eu passei python manage.py collectstatice funcionou.


0

Eu sei que este post é bastante antigo, mas ainda é perfeitamente relevante hoje.

Pelo que vale a pena - eu estava recebendo 500 DEBUG = Falsepara todas as páginas do meu site.

Não tenho rastreamento quando estiver em depuração.

Eu tive que passar por todos os links estáticos nos meus modelos no meu site e encontrei um / (barra) na frente da minha fonte de imagem. {% estático ...%}. Isso causou o erro 500, DEBUG = Falsemas funcionou perfeitamente, Debug = Truesem erros. Muito irritante! Esteja avisado! Muitas horas perdidas devido a uma barra ...


0

Você pode querer executar python manage.py collectstaticdepois de definir DEBUG = Falsee ALLOWED_HOSTS = ['127.0.0.1']entrar settings.py. Após essas duas etapas, meu aplicativo da web funcionou bem no meu servidor local, mesmo com o modo DEBUG = False.

Entre essas configurações 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'

Suponho que talvez a configuração whitenoise tenha algo a ver com o comando estático.


-3

Ok, depois de tentar tantas coisas, a solução correta é ...

você precisa definir DEBUG = 'FALSE'não Falseou FALSE, mas 'FALSE'com''


Eu acho que 'FALSE' é uma string, então é igual a True, é por isso que não ocorre um erro.
apet 26/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.