Perché Django genera errori HTTP 500 per supporti statici quando Debug è impostato su False?
-
02-07-2019 - |
Domanda
Mi sto preparando a distribuire la mia app Django e ho notato che quando cambio il " DEBUG " impostato su False, tutti i riferimenti a file statici (ad es. JavaScript, CSS, ecc.) generano errori HTTP 500
.
Hai idea di cosa stia causando quel problema (e come risolverlo)?
Soluzione
Consiglio vivamente di lasciare che il tuo server web gestisca le richieste statiche, senza arrivare a Django. Nel mio urls.py
, aggiungo il gestore di richieste statiche solo quando il debug è impostato su True.
Tecnicamente, comunque Django al servizio dell'elettricità statica funziona benissimo. Leggi sicuramente la breve pagina dei documenti, http://docs.djangoproject.com/en / dev / howto / static-files / . Ti consigliamo di utilizzare una voce come questa in urls.py
(r'^static/(?P<path>.*), 'django.views.static.serve',
{'document_root': '/path/to/media'})
Altri suggerimenti
Sembra che tu stia provando a servire i tuoi supporti statici usando il server di sviluppo Django. Dai un'occhiata a http://docs.djangoproject.com/en/dev/howto/ deploy / per alcuni scenari di distribuzione / howtos e http: // docs .djangoproject.com / it / dev / howto / static-files / per come servire i file statici (ma nota la dichiarazione di non responsabilità riguardo al NON usare quei metodi in produzione).
In generale, guarderei i log del tuo server e vedrei da dove sta cercando di recuperare i file. Sospetto che i 500 errori siano in realtà errori 404, ma diventano 500 errori perché Django non riesce a trovare o visualizzare il modello 404.html. In caso contrario, sarebbe utile poter pubblicare l'errore 500 specifico che stai riscontrando.
Devi anche controllare i tuoi URL ovunque. Quando DEBUG è impostato su False, tutti gli URL senza trascinamento " / " vengono trattati come bug, diversamente da DEBUG = True, nel qual caso Django aggiungerà " / " ovunque manca. Quindi, in breve, assicurati che tutti i collegamenti finiscano con una barra OVUNQUE.
Si è scoperto che avevo commentato la variabile SECRET_KEY
. Tuttavia, non potevo saperlo. Dovevo solo provare le cose.