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 debug
para 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', '[email protected]'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'zdm', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': 'passwd', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
S= os.path.join(HERE, 'static').replace('\\','/')
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/home/zdm/static',
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '9a7!^gp8ojyk-^^d@*whuw!0rml+r+uaie4ur$(do9zz_6!hy0'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'zdm.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'zdm.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/home/zdm/templates',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'zdm',
'portal',
'admin',
'tagging',
)
django
settings
django-1.5
zhiguo.wang
fonte
fonte
Respostas:
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:
Adicione seu host aqui como
['www.beta800.net']
ou['*']
para um teste rápido, mas não use['*']
para produção .fonte
['*']
na produção.django-pipeline
comportamento de quando a estática ainda não foi coletada. Como uma dica geral, colocar um ponto de interrupção nohandle_uncaught_exception
método do Django ajudará você a descobrir o que está acontecendo aqui.Sei que está atrasado, mas acabei aqui com uma pesquisa pelo meu erro 500.
DEBUG=False
No meu caso, acabou sendo oALLOWED_HOSTS
mas eu estava usandoos.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 quandoDEBUG=False
:fonte
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-exceptionsNo meu caso, o erro foi
ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'
. Corrigi isso executando localmentepython manage.py collectstatic
.fonte
No meu caso, a leitura de documentos de aplicativos de terceiros me salvou adequadamente.
O culpado? django_compressor
eu tinha
DEBUG = True
sempre me dava 500. Para consertar, eu precisava de uma linha nas minhas configurações para executá-lofonte
Certo, no Django 1.5, se DEBUG = False, configure ALLOWED_HOSTS, adicionando domínios sem o número da porta. exemplo:
fonte
Você também deve verificar seus URLs em todo o lugar. Quando o
DEBUG
está definido comoFalse
, todos os URLs sem rastreamento/
são tratados como um bug, diferente do que você temDEBUG = 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.fonte
DEBUG=False
pode revelar erros de importação: stackoverflow.com/questions/25676453/…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_HOSTS
lista 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_HOSTS
versã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.
fonte
local_settings.py
para cada ambiente e depois importá-losettings.py
.Complementando a resposta principal
É irritante alterar as constantes globais ALLOWED_HOSTS e DEBUG
settings.py
ao alternar entre desenvolvimento e produção. Estou usando esse código para definir essas configurações automaticamente:Se você usa o macOS, pode escrever um código mais genérico:
fonte
Pelo que vale a pena - eu estava recebendo 500 com
DEBUG = False
apenas 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.fonte
static
para incluir um arquivo CSS que não existia.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 noALLOWED_HOSTS
valor conforme o cenário para se livrar do erro:1: Seu nome de domínio:
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):
3: Se você estiver testando no servidor local, poderá editar seu
settings.py
ousettings_local.py
como:4: Você também pode fornecer '*' no
ALLOWED_HOSTS
valor, mas isso não é recomendado no ambiente de produção devido a razões de segurança:Também publiquei uma solução detalhada no meu blog que você pode consultar.
fonte
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
em app.views
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
fonte
python manage.py collectstatic
consertou.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
em settings.py, o código deve se parecer com isso:
fonte
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.
fonte
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ê.
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
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)
ou (deixe como padrão do django)
Em suma, O PROBLEMA parecia vir do fato de que esse cache whitenoise + backend de compressão ->
ou o próprio backend de cache do django ->
... 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
fonte
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:
fonte
Eu tenho o problema semelhante, no meu caso, foi causado por ter um script Comentado dentro da tag body.
fonte
Eu me deparei com esse problema. Acontece que eu estava incluindo no modelo, usando o
static
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.
fonte
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 )
static
na raiz do aplicativo django, comomyapp/static
se não estivesse usando. A execução do comandopython manage.py collectstatic
antes de executar o servidor resolveu o problema. Finalmente, começou a funcionar bem.fonte
Comecei a obter o 500 para debug = False na forma de
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.
fonte
isso talvez ajude outra pessoa, no meu caso, o problema com o favicon ausente.
fonte
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.
fonte
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.
fonte
Um pequeno detalhe a ser observado: se a matriz não possuir nenhum, todos os hosts permitidos subsequentes serão ignorados.
Django version 1.8.4
fonte
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 ...
fonte
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.
fonte
Encontrei outra causa do erro 500 quando DEBUG = False. Eu uso o
compressor
utilitário Django e nosso engenheiro de front-end adicionou referências a arquivos de fonte dentro de umcompress css
bloco em um modelo do Django. Como isso:A solução foi mover o link para o
ttf
arquivo abaixo daendcompress
linha.fonte
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.ico
e mais dois CSS.Para consertar isso eu passei
python manage.py collectstatic
e funcionou.fonte
Eu sei que este post é bastante antigo, mas ainda é perfeitamente relevante hoje.
Pelo que vale a pena - eu estava recebendo 500
DEBUG = False
para 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 = False
mas funcionou perfeitamente,Debug = True
sem erros. Muito irritante! Esteja avisado! Muitas horas perdidas devido a uma barra ...fonte
Você pode querer executar
python manage.py collectstatic
depois de definirDEBUG = False
eALLOWED_HOSTS = ['127.0.0.1']
entrarsettings.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
.Suponho que talvez a configuração whitenoise tenha algo a ver com o comando estático.
fonte
Ok, depois de tentar tantas coisas, a solução correta é ...
você precisa definir
DEBUG = 'FALSE'
nãoFalse
ouFALSE
, mas'FALSE'
com''
fonte