Error: Algo salió mal - "Error al procesar la ruta: discovery.categories"

Un usuario administrador está experimentando un error extraño después de actualizar Discourse. El error ocurre cuando el usuario hace clic en el botón «Atrás» o en el logotipo del sitio. Parece activar JavaScript para ir a la raíz/inicio del sitio, pero en su lugar se generan los siguientes errores:

Visualmente, el error aparece así:

En la consola de JS:
console

También he descubierto que esto ocurre con cualquier clic en la barra de navegación, como intentar ir a /admin.

¿Alguna idea sobre cómo rastrear esto más a fondo? No veo ningún error en production.log ni en otro lugar, así que esto ha sido un verdadero rompecabezas, ya que parece estar vinculado a JavaScript.

¿Probaste Cómo usar el modo seguro de Discourse?

Gracias por la sugerencia. Extrañamente, el error persistió incluso al habilitar las tres opciones en el Modo Seguro:

Sigo encontrando callejones sin salida en la depuración hasta ahora. Debo sospechar que el “Modo Seguro” no deshabilita completamente el JavaScript debido a esto… ¿Hay algún otro paso que pueda eliminar aún más el JavaScript de la funcionalidad para pruebas?

¿Es tu sitio accesible públicamente? Si es así, ¿tienes alguna posibilidad de compartir un enlace? (Por mensaje privado está bien si prefieres no publicarlo).

Gracias por el enlace, @mreach. Desde aquí no veo ningún problema evidente.

Mencionaste que esto solo está afectando a un usuario del sitio. ¿Sabes si el problema se limita a un solo navegador o dispositivo? ¿O le ocurre a este usuario incluso cuando inicia sesión con un dispositivo diferente?

Si es solo un navegador o dispositivo, podría indicar que una extensión del navegador (por ejemplo, un bloqueador de anuncios) está interfiriendo con el código de Discourse.

Si le afecta en todos los navegadores, entonces es más complicado. ¿Tienes instalados plugins de terceros en tu foro? También sería interesante saber qué tiene configurado el usuario para su “página de inicio predeterminada” (que se encuentra en las preferencias de “interfaz” de Discourse).

Gracias, sí, he tenido casi los mismos pensamientos. Les pedí que desactivaran todas las extensiones y borraran todos los datos del navegador. Acabo de tener a OTRO usuario que reporta el mismo problema… Y ambos están en Chrome. Les pedí que probaran Firefox y Brave, y ambos dijeron que les funcionó allí, pero nada de lo que intentaron parece hacer que Chrome vuelva a funcionar “correctamente” para ellos. Les volví a preguntar por los resultados en modo Incógnito y ambos reportaron que Incógnito SÍ funciona. Además, todo esto ocurrió después de la última actualización de Discourse, por lo que parece que algo no se está limpiando en JS de alguna manera… Lo cual realmente no entiendo cómo podría ser posible.

Les he preguntado qué tienen configurado como su página de inicio… Te mantendré informado. Es una muy buena idea que no se me había ocurrido…

1 me gusta

Vale, interesante pero no concluyente:

El usuario que tiene el problema tiene “Categorías” configurado como su inicio:
image

Si lo cambian a otro, como “Recientes” en su lugar, PUEDEN cargar la página de inicio haciendo clic en el logotipo del sitio Y usando la flecha “atrás” del navegador. Si vuelven a cambiar a “Categorías” en lugar de “Recientes”, el problema/error vuelve a aparecer. :weary_face:

Así que este usuario también es administrador y, si/cuando hacen clic en el icono de hamburguesa en la esquina superior derecha y seleccionan “Admin”, también obtienen el error reportado anteriormente, incluso cuando la página de inicio está cambiada a “Recientes” en lugar de “Categorías”.

Por supuesto, eso es información nueva, pero no del todo útil desde mi perspectiva. Hmm.

1 me gusta

¿Hay alguna posibilidad de obtener más detalles sobre estos errores? Todos deberían ser expandibles y, con suerte, incluir un poco más de información sobre el error.

Me proporcionaron la siguiente salida de consola: https://pastebin.com/LuDHesyQ

¡Gracias nuevamente por las sugerencias hasta ahora! ¿Tienes alguna observación al respecto, @david?

1 me gusta

Me temo que no; estos registros son bastante genéricos y no parecen indicar mucho sobre la causa real.

El registro más interesante es el que aparece en la parte superior de la captura de pantalla que compartiste, y también es la última entrada en Pastebin:

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

Podría ser útil saber qué hay en el .... Si haces clic en el pequeño triángulo a la izquierda del registro, debería expandirse para mostrar más información. Una copia y pega, o una captura de pantalla de eso, podría ayudar.

Por separado, ¿estás viendo algún error del lado del servidor (en /logs)? ¿Y estás ejecutando la última versión de Discourse?

Sí, estoy ejecutando la última versión. He revisado los registros durante el error y no veo nada, ni en producción ni en ningún otro lugar…

Hmm, realizaron una operación de copiar objeto en esa línea y obtuvieron lo siguiente:

{
    "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\" >Estamos temporalmente en mantenimiento&hellip;</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á actualmente en mantenimiento. Ya sea que estemos actualizando el sitio o realizando mantenimiento programado.</p>\n\t\t  <p>Para tu comodidad, hemos configurado esta página para que se actualice AUTOMÁTICAMENTE cuando el sistema esté disponible nuevamente.</p>\n                  <p>Muchas gracias por tu paciencia.</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"
}

Y una captura de pantalla de la consola:

@david ¿es eso a lo que te referías? Espero que hayamos capturado los resultados correctos.

¿Estás ejecutando Discourse detrás de un proxy? Estoy bastante seguro de que este mensaje de mantenimiento no proviene del propio Discourse :thinking:

Esa es una implementación de página de error que se muestra cuando el sitio está en mantenimiento (como una actualización o una actualización de Docker)…

Supongo que tu sitio no estaba en mantenimiento deliberado en el momento del error. En ese caso, debe haber algún problema con la implementación o configuración de ese proxy. Para descartarlo, ¿podrías exponer Discourse directamente en los puertos 80/443? (según nuestras instrucciones estándar de instalación).

Por supuesto, es posible que un error en Discourse esté causando que el proxy muestre este mensaje. Pero es difícil diagnosticarlo sin saber qué estaba devolviendo Discourse. ¿Acaso tu proxy guarda registros de las respuestas de Discourse aguas arriba?