Por que o Django gera erros HTTP 500 para mídia estática quando a depuração é definida como falsa?
-
02-07-2019 - |
Pergunta
Estou me preparando para implantar meu aplicativo de Django e notei que, quando alterei a configuração "Debug" para False, todas as referências a arquivos estáticos (ou seja, JavaScript, CSS, etc.) resultam em HTTP 500
erros.
Alguma idéia do que está causando esse problema (e como corrigi -lo)?
Solução
Eu recomendo permitir que seu servidor da web lide com as solicitações estáticas, sem chegar ao Django. No meu urls.py
, Eu só adiciono o manipulador de solicitação estática quando a depuração é definida como true.
Tecnicamente, o Django que serve a estática funciona bem. Definitivamente leia a página curta dos documentos, http://docs.djangoproject.com/en/dev/howto/static-files/. Você vai querer usar uma entrada como esta em urls.py
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': '/path/to/media'})
Outras dicas
Parece que você pode estar tentando servir sua mídia estática usando o Django Development Server. Dar uma olhada em http://docs.djangoproject.com/en/dev/howto/deployment/ Para alguns cenários de implantação/Howtos e http://docs.djangoproject.com/en/dev/howto/static-files/ Para como servir arquivos estáticos (mas observe o aviso de não usar esses métodos em produção).
Em geral, eu examinaria os logs do servidor e veria de onde ele está tentando buscar os arquivos. Suspeito que os 500 erros sejam realmente 404 erros, mas eles se tornam 500 erros porque o Django não consegue encontrar ou renderizar o modelo 404.html. Se não for esse o caso, seria útil se você pudesse postar o erro 500 específico que está recebendo.
Você também deve verificar seus URLs em todo o lugar. Quando a depuração é definida como falsa, todos os URLs sem arrastar "/" são tratados como um bug, diferentemente de quando você tem depuração = verdadeiro, nesse caso, o Django anexará "/" em todos os lugares está faltando. Portanto, em suma, verifique se todos os links terminam com uma barra em todos os lugares.
Acontece que eu comentarei o SECRET_KEY
variável. Não havia como eu saber. Só tive que experimentar as coisas.