Múltiplas entradas repetidas de resumo por e-mail

Aqui está outro que acabou de ser enviado para uma conta de usuário inativo de teste:

  • última visualização em 2024-09-12
  • Frequência do resumo: diária
  • “Incluir conteúdo de novos usuários em e-mails de resumo”: marcado
  • nenhuma tag relevante silenciada

Tópicos Populares:

“IA - maior é melhor?” – repetido 3 vezes. Tópico tem 3 tags, 0 respostas, 0 curtidas.
“Desafios de Engenharia Social” – repetido 2 vezes. Tópico tem 2 tags, 1 resposta, 0 curtidas.

Novidades para você:

“Solicitações de novas tags” – não repetido. Tópico tem 0 tags, 0 respostas, 0 curtidas.

1 curtida

No último resumo que uma das minhas contas recebeu, nenhum dos tópicos foi duplicado, mas os comentários abaixo deles foram (“Posts Populares”). Havia cinco espaços e duas duplicatas (três posts únicos), ambas do mesmo tópico.

Editar: Estou analisando alguns resumos históricos que foram enviados para diferentes contas de teste/administrador:

  • O anterior também tem duas duplicatas nos Posts Populares, também desse mesmo tópico.
  • O anterior a esse tinha um tópico duplicado, mas nenhum Post Popular duplicado. Há uma duplicata em “Novidades para você”.
  • O anterior a esse não tem nenhuma duplicata.
1 curtida

@j127, seria interessante saber quantas tags seus tópicos de resumo tinham. Em minhas amostras recentes, a duplicação corresponde ao número de tags em um tópico. Pode ser coincidência — ou não.

3 curtidas

Consegui reproduzir o problema em meu site Discourse local adicionando uma tag à configuração do site digest suppress tags e, em seguida, criando um tópico com várias tags.

O código a seguir causa o problema: discourse/app/models/topic.rb at main · discourse/discourse · GitHub

    if SiteSetting.digest_suppress_tags.present?
      tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
      if tag_ids.present?
        topics =
          topics.joins("LEFT JOIN topic_tags tg ON topics.id = tg.topic_id").where(
            "tg.tag_id NOT IN (?) OR tg.tag_id IS NULL",
            tag_ids,
          )
      end
    end

Editar: Não acho que um LEFT JOIN seja necessário aqui. As colunas da tabela topic_tags unida não parecem ser usadas posteriormente no método. A correção pode ser tão simples quanto:

if SiteSetting.digest_suppress_tags.present?
tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
  if tag_ids.present?
  topics =
    topics.where.not(id: TopicTag.where(tag_id: tag_ids).select(:topic_id))
  end
end

Deixarei para a equipe do Discourse descobrir a melhor abordagem. O método for_digest é executado muitas vezes e precisa ser eficiente.

4 curtidas

Sim, todas as postagens duplicadas tinham duas tags.

2 curtidas

@simon – muito obrigado por investigar isso! :smiley: Tenho certeza de que deu muito trabalho analisar. Aguardarei o retorno da equipe do Discourse e a ação sobre sua análise.

1 curtida

Apenas confirmando que remover a tag que eu tinha em digest suppress tags normalizou os resumos. (Estou usando digest suppress categories no momento.)

4 curtidas

@simon estava correto :+1: Esse era de fato o bug

7 curtidas

Ótimas notícias! :smiley:

Não está totalmente claro quando os commits mesclados estarão disponíveis no canal beta. Se eu estiver na versão 3.4.0.beta3-dev (53f9c81790) e ela não estiver solicitando uma atualização da GUI, uma atualização pela linha de comando captará essa alteração?

Você ainda pode puxar a UI sem que ela solicite uma, e ela puxará os novos commits. Mas também fazer uma reconstrução da CLI puxaria eles também.

2 curtidas

Este tópico foi fechado automaticamente após 3 dias. Novas respostas não são mais permitidas.