Erreur : Quelque chose s'est mal passé - "Erreur lors du traitement de la route : discovery.categories"

Un utilisateur administrateur rencontre une erreur étrange après la mise à jour de Discourse. L’erreur se produit lorsque l’utilisateur clique sur le bouton retour ou sur le logo du site. Il semble que cela déclenche du JavaScript pour revenir à la racine/accueil du site, mais au lieu de cela, les erreurs suivantes se produisent :

Visuellement, l’erreur apparaît ainsi :

Dans la console JS :
console

J’ai également constaté que cela se produit avec tous les clics de la barre de navigation, comme par exemple essayer d’accéder à /admin.

Avez-vous des idées pour approfondir le diagnostic ? Je ne vois aucune erreur dans production.log ni ailleurs, ce qui rend ce problème très déroutant, car il semble lié au JavaScript.

Avez-vous essayé Comment utiliser le mode sans échec de Discourse ?

Merci pour la suggestion. Étrangement, l’erreur persiste même avec l’activation des trois options en mode sans échec :

Je continue de buter sur des impasses dans le débogage. Je soupçonne donc que le « Mode sans échec » ne désactive pas entièrement le JavaScript à cause de cela… Existe-t-il une autre étape permettant d’éliminer davantage le JavaScript des fonctionnalités pour les tests ?

Votre site est-il accessible au public ? Si oui, seriez-vous en mesure de partager un lien ? (Un message privé convient si vous préférez ne pas le publier publiquement)

Merci pour le lien, @mreach. De mon côté, je ne vois aucun problème évident.

Vous avez mentionné que cela ne touche qu’un seul utilisateur du site. Savez-vous si le problème est limité à un seul navigateur ou appareil ? Ou cela se produit-il pour cet utilisateur même lorsqu’il se connecte avec un autre appareil ?

Si c’est le cas d’un seul navigateur ou appareil, cela pourrait indiquer qu’une extension de navigateur (par exemple, un bloqueur de publicités) interfère avec le code de Discourse.

Si le problème se manifeste sur tous les navigateurs, c’est plus complexe. Avez-vous installé des plugins tiers sur votre forum ? Il serait également intéressant de savoir comment l’utilisateur a configuré sa « page d’accueil par défaut » (disponible dans ses préférences d’« interface » sur Discourse).

Merci – oui, j’ai eu essentiellement les mêmes réflexions. Je leur ai fait désactiver toutes les extensions et effacer toutes les données du navigateur. Je viens d’avoir un AUTRE utilisateur qui signale le même problème… Et ils sont tous les deux sur Chrome. Je leur ai demandé d’essayer Firefox et Brave, et ils ont chacun indiqué que cela fonctionnait pour eux sur ces navigateurs, mais rien de ce qu’ils ont essayé ne semble permettre à Chrome de fonctionner « correctement » à nouveau. Je leur ai à nouveau demandé des résultats en navigation privée, et ils ont tous deux confirmé que la navigation privée FONCTIONNE. Encore une fois, tout cela s’est produit après la dernière mise à jour de Discourse, ce qui laisse penser que quelque chose ne se vide pas correctement en JS… Ce que je ne comprends vraiment pas, car je ne vois pas comment cela pourrait être le cas.

Je leur ai demandé quelle page d’accueil ils ont configurée… Je te tiendrai au courant. C’est une très bonne idée qui ne m’était pas venue à l’esprit…

1 « J'aime »

D’accord, intéressant mais pas concluant :

L’utilisateur qui rencontre le problème a « Catégories » défini comme sa page d’accueil :
image

S’ils la changent pour une autre, comme « Derniers » par exemple, ils PEUVENT charger la page d’accueil en cliquant sur le logo du site ET en utilisant la flèche « retour » du navigateur. S’ils repassent à « Catégories » au lieu de « Derniers », le problème / l’erreur réapparaît. :weary_face:

Cet utilisateur est également administrateur et, s’ils cliquent sur l’icône hamburger en haut à droite puis sur « Admin », ils rencontrent également l’erreur signalée ci-dessus — même lorsque la page d’accueil est définie sur « Derniers » au lieu de « Catégories ».

Bien sûr, c’est une nouvelle information, mais pas entièrement utile de mon point de vue. Hmm.

1 « J'aime »

Y a-t-il une possibilité d’obtenir plus de détails sur ces erreurs ? Elles devraient toutes être développables et inclure, espérons-le, un peu plus d’informations sur l’erreur.

Ils m’ont fourni la sortie de console suivante : https://pastebin.com/LuDHesyQ

Encore merci pour les suggestions jusqu’à présent — aurais-tu des observations à ce sujet, @david ?

1 « J'aime »

Je crains que non — ces journaux sont assez génériques et ne semblent pas indiquer la véritable cause.

Le journal le plus intéressant est celui qui se trouve en haut de la capture d’écran que vous avez partagée ci-dessus, et qui correspond également à la dernière entrée du pastebin :

domainname.com/:1 Uncaught (in promise) {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

Il pourrait être utile de savoir ce que contient le ... à la fin. Si vous cliquez sur le petit triangle à gauche du journal, il devrait se développer pour révéler davantage d’informations. Une copie/collage ou une capture d’écran de ce contenu pourrait aider.

Par ailleurs, constatez-vous des erreurs côté serveur (dans /logs) ? Et utilisez-vous la dernière version de Discourse ?

Oui, j’exécute la dernière version. J’ai consulté les journaux pendant l’erreur et je ne vois rien, ni en production ni ailleurs…

Hmm, ils ont effectué une copie d’objet sur cette ligne et obtenu le résultat suivant :

{
    "readyState": 4,
    "responseText": "<!doctype html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"refresh\" content=\"30\">\n        <title>domainname.com Maintenance</title>\n        <style>\n	    html {\n	        background: #3d4147;\n	    }\n            .center {\n                display: flex;\n                justify-content: center;\n            }\n            .container {\n                background: #717984;\n                max-width: 500px;\n                padding: 5px 50px 30px 50px;\n                margin-top: 20px;\n            }\n            .title {\n                padding-top: 20px;\n            }\n            h1, p {\n                font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n            }\n            @keyframes spin {\n                from { transform: rotate(0deg); }\n                to { transform: rotate(360deg); }\n            }\n            .spinner {\n                animation: spin 10s infinite linear;\n                height: 75px;\n                width: 75px;\n                border: 7px solid #555555;\n                border-right-color: transparent;\n                border-radius: 50%;\n                margin-top: 20px;\n            }\n        </style>\n    </head>\n    <body>\n                <div class=\"center\">\n                    <img src=\"/err/site.png\" alt=\"site logo image\" width=\"512\" height=\"171\">\n                </div>\n        <div class=\"center\">\n            <div class=\"container\">\n\t\t<center>\n                  <h1 class=\"title\" >Nous sommes temporairement en maintenance…</h1>\n\t\t</center>\n\n                <div class=\"center\">\n                    <img src=\"/err/error.png\" alt=\"maintenance image\" width=\"150\" height=\"152\">\n                </div>\n\n\t\t<center>\n                  <p>domainname.com est actuellement en maintenance. Nous procédons soit à une mise à niveau du site, soit à une maintenance planifiée. </p>\n\t\t  <p>Pour votre commodité, nous avons configuré cette page pour se rafraîchir AUTOMATIQUEMENT lorsque le système sera à nouveau disponible !</p>\n                  <p>Merci beaucoup pour votre patience.</p>\n\t\t</center>\n\t\t\n                <div class=\"center\">\n                    <div class=\"spinner\"></div>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n",
    "status": 200,
    "statusText": "parsererror"
}

Et une capture d’écran de la console :

@david est-ce à cela que tu faisais référence ? J’espère que nous avons bien saisi les résultats corrects.

Utilisez-vous Discourse derrière un proxy ? Je suis presque certain que ce message de maintenance ne provient pas de Discourse lui-même :thinking:

Il s’agit d’une page d’erreur qui s’affiche lorsque le site est en maintenance (par exemple, lors d’une mise à niveau ou d’une mise à jour Docker)…

Je suppose que votre site ne faisait pas l’objet d’une maintenance délibérée au moment de l’erreur ? Dans ce cas, il doit y avoir un problème avec cette implémentation ou cette configuration de proxy. Pour écarter cette hypothèse, pouvez-vous exposer Discourse directement sur les ports 80/443 ? (selon nos instructions d’installation standard)

Bien sûr, il est possible qu’une erreur dans Discourse soit à l’origine de l’affichage de ce message par le proxy. Mais il est difficile de diagnostiquer cela sans savoir ce que Discourse renvoyait. Votre proxy conserve-t-il peut-être des journaux des réponses en amont de Discourse ?