0
votes

Erreur 500 sur django avec debug = False même avec ALLOWED_HOSTS = ["*"]

J'obtiens 500 erreurs sur chaque page que j'essaie de parcourir. La seule chose que je change est DEBUG en False.

Voici ma config:

SECRET_KEY = os.environ.get("SECRET_KEY", "0$ke!x1bz5cj0mpzo1zfx4omw-c9iqw%m95zb)(2@ddg5s+3!f")

ALLOWED_HOSTS = ['*']

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False


# Application definition

INSTALLED_APPS = [
    'posts', # Contains all dynamic and static pages related to posts
    'courses', # Contains all dynamic and static pages related to courses and modules
    'pages', # Contains all static pages that are not post related
    'markdownx', # Allows for editing and creating markdown content
    'jet.dashboard',
    'jet', # Django admin theme override
    'pwa', # Sets app to be PWA compliant
    'whitenoise.runserver_nostatic', # Serving static files
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Littéralement, toutes les réponses que j'ai vues indiquent qu'il suffit de régler votre ALLOWED_HOSTS sur ['*'], comme vous pouvez le voir, je l'ai fait et toujours pas de dés. J'ai vérifié les documents et ils sont assez rares sur les autres effets du mode DEBUG.Il y a une section de la documentation qui dit:

Par mesure de sécurité, Django n'inclura pas les paramètres susceptibles d'être sensibles, tels que SECRET_KEY. Plus précisément, il exclura tout paramètre dont le nom comprend l'un des éléments suivants: 'API' 'CLÉ' 'PASS' 'SECRET' 'SIGNATURE' 'TOKEN'

https://docs.djangoproject.com/en/2.2/ref/settings/#debug

La seule chose à laquelle je peux penser est que la clé secrète n'est pas récupérée, mais si oui, comment faites-vous cela en production?

EDIT: Certaines personnes m'ont demandé de passer en mode débogage sur true pour obtenir le traçage. Le problème est que lorsque je le règle sur true, je n'obtiens pas l'erreur 500, c'est uniquement lorsque DEBUG = False.


6 commentaires

Une erreur 500 doit créer une trace sur la console / dans le journal.


Veuillez publier le journal pour être en mesure de comprendre le problème réel.


Utilisez debug=True et consultez le message d'erreur. Si ce n'est pas clair, postez-le ici.


Le problème est que lorsque le débogage est True, je n'obtiens pas l'erreur, et avec Debug False défini, le traçage est littéralement juste: la python System check identified no issues (0 silenced). December 14, 2019 - 21:46:09 Django version 2.2.7, using settings 'canadiancoding.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. [14/Dec/2019 21:46:14] "GET / HTTP/1.1" 500 27


@KieranWood Créez un projet de repro sur GitHub.


quel est le résultat lorsque vous os.environ['SECRET_KEY'] ?


3 Réponses :


1
votes

Donc, le problème était lié à une SEULE ICÔNE NON CHARGÉE, le chemin était désactivé mais en raison de la façon dont Django gère les fichiers statiques (ce qui est honnêtement stupide) lorsque DEBUG = True je ne l'ai pas attrapé, et lorsque DEBUG = False il y avait pas de retraçage.

Une astuce intéressante que j'ai apprise était que vous pouvez forcer Django à vous donner les informations de journalisation dont vous avez besoin en attachant un enregistreur explicite dans votre principal settings.py comme ceci:

from whitenoise.storage import CompressedManifestStaticFilesStorage


class WhiteNoiseStaticFilesStorage(CompressedManifestStaticFilesStorage):
    manifest_strict = False

Donc, trois choses que j'ai apprises au cours de mes 6 heures de débogage, vous êtes dans ma situation:

  1. Définissez DEBUG = False tout de suite dans votre cycle de développement, cela vous obligera à configurer correctement collectstatic.
  2. La documentation de Heroku pour obtenir la configuration de votre application se trouve sur la façon de configurer correctement WhiteNoise, voici donc la configuration réelle:
STATIC_URL = '/static/'

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

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

STATICFILES_STORAGE = '.storage.WhiteNoiseStaticFilesStorage' # Read point 3 for details about this
  1. Vous devez sous-classer localement la configuration par défaut de WhiteNoises pour supprimer l'attribut manifest_strict intégré de Djangos (obtenu à partir d'ici: https://stackoverflow.com/a/51580328/11602400 )
import logging
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
        },
    },
}


0 commentaires

0
votes

Ajouter une réponse car cela ne m'a pris que quelques heures à déboguer et cela sauvera peut-être quelqu'un d'autre du même problème.

Je n'obtenais que SERVER ERROR 500 sur certaines pages d'administration. Certains modèles fonctionneraient bien, d'autres non. J'ai suspecté un module tiers à ce stade.

Ce problème est apparu pour moi car j'utilise django-nested-inline et il y avait un bogue dans la version installée via pip qui n'a pas pu localiser une copie de jQuery qui est nécessaire pour modifier les pages d'administration pour gérer les inlines imbriquées.

Ce bogue a été corrigé, je devais donc supprimer la version que j'utilisais, puis installer la version corrigée directement depuis Github.


0 commentaires

0
votes

J'ai résolu le mien par

  1. Mettez DEBUG = True

  2. Exécutez $ python manage.py collecter statique

Toute erreur dans vos fichiers statiques apparaîtra dans votre terminal s'il y en a. Essayez de résoudre cette erreur avant de continuer.

  1. Allez dans votre projet principal / settings.py Et au lieu de créer un hôte autorisé général en utilisant "*". Remplacez-le par votre lien localhost Par exemple: 127.0. 0,1.

  2. Accédez à l'historique de votre navigateur et supprimez les cookies et le cache récents.

  3. Rafraîchissez vos projets et c'est tout.


0 commentaires