La función de eliminar usuario dejó de funcionar en configuraciones de docker de staging/producción, pero funciona localmente (sin configuración de docker)

Hola a todos,

Tengo un problema en el que la ventana secundaria de eliminación de usuario (la que realmente elimina al usuario, no se muestra en staging/prod (configuración de docker), pero funciona bien localmente, sin configuración de docker)


No pasa nada cuando solo presiono eliminar. Localmente, procede a mostrar “Eliminando…” y elimina al usuario.

Simplemente dejó de funcionar hace unas semanas. Lo estaba usando para eliminar usuarios en diciembre del año pasado.

1 me gusta

Hola Stephan :wave:

¿Puedes compartir tu versión de Discourse?

¿Hay algún error en la consola de las herramientas de desarrollador del navegador?

¿Hay algún error en los registros del panel de administración de tu Discourse?

1 me gusta

Nada en ninguna parte, es como si el código no se llamara, lo revisé localmente y lo depuré, todo funciona bien. Es realmente extraño.

Instalado

2.5.0.beta7

( 2a17124a5b )

2.5 ya es bastante antiguo, unos dos años y medio, Discourse acaba de alcanzar la versión 3.0.

¿Hay alguna razón por la que no estés actualizando?

3 Me gusta

Muchísimos de hecho :slight_smile:

Tenemos un plugin personalizado que ejecuta toda la lógica, haciendo que Discourse sea solo una herramienta para almacenar datos y manejar la autorización y autenticación básicas. Ejecutamos una API mobile-first que también maneja la validación de pagos y los inicios de sesión sociales con aplicaciones móviles (flujos personalizados) entre otras características avanzadas :slight_smile:

Mi problema no es realmente con la configuración de Discourse en su conjunto, ni con la versión, ya que ha estado funcionando bien durante 3 años y seguirá funcionando durante algunos años más porque no tiene dependencias estrictas de nada, y lo tenemos alojado en un servidor dedicado.

Realmente necesito que alguien me diga cómo averiguar por qué, al presionar la acción, no sucede nada… Como lo veo, todo es javascript.

destroy(opts) {
    const user = this;
    const message = I18n.t("admin.user.delete_confirm");
    const location = document.location.pathname;

    const performDestroy = function(block) {
      bootbox.dialog(I18n.t("admin.user.deleting_user"));
      let formData = { context: location };
      if (block) {
        formData["block_email"] = true;
        formData["block_urls"] = true;
        formData["block_ip"] = true;
      }
      if (opts && opts.deletePosts) {
        formData["delete_posts"] = true;
      }
      return ajax(`/admin/users/${user.get("id")}.json`, {
        type: "DELETE",
        data: formData
      })
        .then(function(data) {
          if (data.deleted) {
            if (/^\\/admin\\/users\\/list\\//.test(location)) {
              document.location = location;
            } else {
              document.location = getURL("/admin/users/list/active");
            }
          } else {
            bootbox.alert(I18n.t("admin.user.delete_failed"));
            if (data.user) {
              user.setProperties(data.user);
            }
          }
        })
        .catch(function() {
          AdminUser.find(user.get("id")).then(u => user.setProperties(u));
          bootbox.alert(I18n.t("admin.user.delete_failed"));
        });
    };

    const buttons = [
      {
        label: I18n.t("composer.cancel"),
        class: "btn",
        link: true
      },
      {
        label:
          `${iconHTML("exclamation-triangle")} ` +
          I18n.t("admin.user.delete_and_block"),
        class: "btn btn-danger",
        callback: function() {
          performDestroy(true);
        }
      },
      {
        label: I18n.t("admin.user.delete_dont_block"),
        class: "btn btn-primary",
        callback: function() {
          performDestroy(false);
        }
      }
    ];

    bootbox.dialog(message, buttons, { classes: "delete-user-modal" });
  },

¿Has mirado los commits que siguieron a esa versión en particular?

Podría ser solo un error específico de esa versión. Si alguna vez funcionó en esa compilación, investigaría qué más ha cambiado.

¿Has actualizado algo desde que te fijaste en esa compilación? ¿Algún plugin de terceros?

1 me gusta

No… dejó de funcionar a mediados de enero aproximadamente, mientras la aplicación ya estaba en ejecución. Es muy raro.

1 me gusta

¿Y no hay errores en /logs ni en la consola de tu navegador?

1 me gusta

Esta es mi lista de plugins :slight_smile:

La gente de docker_manager hizo algunas cosas recientemente, DEV: Resolve deprecations in upgrade-notice component (#162) · discourse/docker_manager@98205ea · GitHub, que dejaron mi configuración inutilizable durante unos días hasta que lo descubrí… Pero eso es todo.

1 me gusta

¿Has fijado la versión de Discourse en tu app.yml?

1 me gusta

Si tienes un plugin personalizado, ¿por qué no aparece en la lista de plugins? ¿Cómo se instaló esta instancia?

Es un poco difícil tener algo que se mueva en la configuración :slight_smile:

Envié la versión de la versión desplegada, el docker se crea con esa versión y todo está fijado.

Lo escribí :slight_smile:
Extrae datos cuando el contenedor se compila y se ejecuta :slight_smile: así que solo es visible en el código.

1 me gusta

¿Existe algún riesgo de que la imagen base se haya actualizado? Discourse_docker subió a ruby 3.1 en enero y hemos visto que varios entornos antiguos se comportan de manera impredecible con el cambio.

1 me gusta

No, el código enlaza a una rama clonada dentro de nuestro repositorio y, dada la forma en que construimos la imagen de Docker, nadie tiene acceso para construir otra. De ninguna manera.

1 me gusta

Así que creé la última imagen de Docker hace unos 5-6 meses… Y todavía creo que apuntaba a la versión de Docker que estaba activa cuando mi versión de Discourse era nueva :slight_smile: ya que guardamos todo con antelación. - Sí, 24 de junio de 2020 :slight_smile:

Para tu información: también eliminé docker_manager. No ha cambiado nada.

1 me gusta

Por ahora, decidí crear un flujo de eliminación en nuestro panel de administración, no estoy muy seguro de lo que sucede en la interfaz de usuario, pero el endpoint DELETE funciona correctamente y no falla para usuarios simples (no administradores, no moderadores).

Si alguien puede ayudar con esto, sería genial :slight_smile: