Plusieurs entrées d'e-mails de résumé répétées

Voici un autre qui vient d’être envoyé à un compte utilisateur inactif :

  • dernière connexion le 2024-09-12
  • Fréquence du résumé : quotidien
  • « Inclure le contenu des nouveaux utilisateurs dans les e-mails de résumé » : coché
  • aucun tag pertinent mis en sourdine

Sujets populaires :

« L’IA – plus grand, c’est mieux ? » – répété 3 fois. Le sujet a 3 tags, 0 réponse, 0 like.
« Défis d’ingénierie sociale » – répété 2 fois. Le sujet a 2 tags, 1 réponse, 0 like.

Nouveautés pour vous :

« Demandes de nouveaux tags » – non répété. Le sujet a 0 tag, 0 réponse, 0 like.

1 « J'aime »

Dans le dernier résumé reçu par l’un de mes comptes, aucun des sujets n’a été dupliqué, mais les commentaires en dessous d’eux l’ont été (« Articles populaires »). Il y avait cinq emplacements et deux doublons (trois articles uniques), tous deux du même sujet.

Modification : Je parcours certains résumés historiques qui ont été envoyés à différents comptes de test/administrateur :

  • Le précédent contient également deux doublons dans les « Articles populaires », également du même sujet.
  • Celui d’avant avait un sujet en double mais aucun article populaire en double. Il y a un doublon dans « Nouveautés pour vous ».
  • Celui d’avant ne contient aucun doublon.
1 « J'aime »

@j127, il serait intéressant de savoir combien d’étiquettes avaient vos sujets de résumé. Dans mes récents échantillons, la duplication correspond au nombre d’étiquettes d’un sujet. Il pourrait s’agir d’une coïncidence, ou pas.

3 « J'aime »

J’ai pu reproduire le problème sur mon site Discourse local en ajoutant une balise au paramètre de site digest suppress tags puis en créant un sujet avec plusieurs balises.

Le code suivant est la cause du problème : 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

Edit : Je ne pense pas qu’un LEFT JOIN soit nécessaire ici. Les colonnes de la table topic_tags jointe ne semblent pas être utilisées plus tard dans la méthode. La correction pourrait être aussi simple que :

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

Je laisse l’équipe Discourse trouver la meilleure approche. La méthode for_digest est exécutée de nombreuses fois et doit être efficace.

4 « J'aime »

Oui, tous les doubles posts avaient deux balises.

2 « J'aime »

@simon – merci beaucoup d’avoir fait cette recherche ! :smiley: Je suis sûr que cela a nécessité beaucoup de travail. J’attends avec impatience le retour de l’équipe Discourse et l’action sur votre analyse.

1 « J'aime »

Je confirme que la suppression de la balise que j’avais dans digest suppress tags a normalisé les résumés. (Je m’appuie sur digest suppress categories en attendant.)

4 « J'aime »

@simon avait raison :+1: C’était bien le bug

7 « J'aime »

Excellente nouvelle ! :smiley:

Je ne suis pas tout à fait sûr de savoir quand les commits fusionnés sont disponibles sur le canal bêta. Si je suis sur la version 3.4.0.beta3-dev (53f9c81790) et qu’elle ne demande pas de mise à jour de l’interface graphique, une mise à jour en ligne de commande récupérera-t-elle ce changement ?

Vous pouvez toujours extraire l’interface utilisateur sans qu’elle ne vous le demande, et cela extraira les nouveaux commits. Mais une reconstruction de la CLI les extrairait également.

2 « J'aime »

Ce sujet a été automatiquement fermé après 3 jours. Les nouvelles réponses ne sont plus autorisées.