Funcionalidade de exclusão de usuário parou de funcionar em configurações Docker de staging/produção, mas funciona localmente (sem configuração Docker)

Olá a todos,

Tenho um problema em que a janela secundária de exclusão de usuário (a que realmente exclui o usuário, não aparece em staging/prod (configuração docker), mas funciona bem localmente - sem configuração docker)


Nada acontece quando clico apenas em excluir. Localmente, ele prossegue para mostrar “Excluindo…” e exclui o usuário.

Parou de funcionar há algumas semanas. Eu o estava usando para excluir usuários em dezembro do ano passado.

Olá Stephan :wave:

Você pode compartilhar sua versão do Discourse?

Há algum erro no console das ferramentas de desenvolvedor do navegador?

Há algum erro nos logs do seu painel de administração do Discourse?

Nada em lugar nenhum, é como se o código não fosse chamado, eu o revisei localmente e depurei, tudo funciona bem. É realmente estranho.

Instalado

2.5.0.beta7

( 2a17124a5b )

2.5 já está bem antigo – cerca de dois anos e meio, o Discourse acabou de atingir a versão 3.0.

Há algum motivo para você não estar atualizando?

Tantos, na verdade :slight_smile:

Temos um plugin personalizado que executa toda a lógica, tornando o Discourse apenas uma ferramenta para armazenar dados e lidar com autorização e autenticação básicas. Executamos uma API mobile-first que também lida com a validação de pagamentos e logins sociais com aplicativos móveis (fluxos personalizados), entre outros recursos avançados :slight_smile:

Meu problema não é realmente com a configuração do Discourse como um todo, ou com a versão, pois está funcionando bem há 3 anos e ainda funcionará por mais alguns anos porque não tem dependências estritas de nada, e o temos hospedado em um servidor dedicado.

Eu realmente preciso que alguém me diga como descobrir por que, ao pressionar a ação, nada acontece… Do jeito que vejo, é tudo 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" });
  },

Você já olhou os commits que seguiram essa versão específica?

Pode ser apenas um bug específico dessa versão. Se já funcionou nessa compilação, eu investigaria o que mais mudou.

Você atualizou alguma coisa desde que travou nessa compilação? Algum plugin de terceiros?

Não.. parou de funcionar em meados de janeiro, mais ou menos, enquanto o aplicativo já estava em execução. É muito estranho.

E não há erros em /logs ou no console do seu navegador?

Esta é a minha lista de plugins :slight_smile:

As pessoas em docker_manager fizeram algumas coisas recentemente, DEV: Resolve deprecations in upgrade-notice component (#162) · discourse/docker_manager@98205ea · GitHub, que quebraram minha configuração por alguns dias até que eu descobri… Mas é basicamente isso.

Você fixou a versão do Discourse em seu app.yml?

Se você tem um plugin personalizado, por que ele não aparece na lista de plugins? Como esta instância foi instalada?

É meio difícil ter algo em movimento na configuração :slight_smile:

Enviei a versão da versão implantada, o docker é criado com essa versão e tudo está fixado.

Bem, eu escrevi :slight_smile:
Ele puxa dados quando o contêiner é construído e executado :slight_smile: então só é visível no código.

Existe algum risco de a imagem base ter sido atualizada? O Discourse_docker foi atualizado para ruby 3.1 em janeiro e vimos um número de ambientes mais antigos se comportarem de forma imprevisível com a mudança.

Não, o código se vincula a um branch clonado dentro do nosso repositório e, pela forma como construímos a imagem do Docker, ninguém tem acesso para construir outra. De jeito nenhum.

Então eu criei a última imagem do docker há cerca de 5-6 meses… E ainda acho que estava apontando para a versão do docker que estava ativa quando minha versão do discourse era nova :slight_smile: pois salvamos tudo com antecedência. - Sim, 24 de junho de 2020 :slight_smile:

FYI: removi o docker_manager também. Nada mudou

Por enquanto, decidi apenas criar um fluxo de exclusão em nosso painel de administração. Não tenho muita certeza do que acontece na interface do usuário, mas o endpoint DELETE funciona corretamente e não falha para usuários simples (não administradores, não moderadores).

Se alguém puder ajudar com isso, seria ótimo :slight_smile: