ok, ce script Rails agira comme un « tout marquer comme lu » global et forcera le compteur unread à 0 pour tous les utilisateurs, ce qui, malheureusement, effacera tous les comptes non lus légitimes en plus des non lus fantômes. Nous pouvons le faire avec une commande SQL dans Rails. Mais notez que cela ne corrige pas le bug racine. De plus, bonne idée si vous avez une sauvegarde récente sous la main, mais je l’ai testé sur mon forum de développement et cela a fonctionné.
cd /var/discourse
./launcher enter app
rails c
collez le bloc entier ci-dessous et appuyez sur Entrée
sql = <<~SQL
UPDATE topic_users
SET last_read_post_number = topics.highest_post_number
FROM topics
WHERE topics.id = topic_users.topic_id
AND COALESCE(topic_users.last_read_post_number, 0) < topics.highest_post_number
AND topic_users.notification_level IN (2, 3, 4) -- Suivi, Surveillance, Surveillance du premier message
SQL
# exécuter la mise à jour
result = ActiveRecord::Base.connection.execute(sql)
puts "#{result.cmd_tuples} sujets non lus ont été correctement effacés à l'échelle du site."
# forcer les navigateurs clients à vider leur état mis en cache et à se synchroniser avec la base de données
MessageBus.publish("/topic-tracking-state", { clear: true })
les utilisateurs devront peut-être rafraîchir manuellement pour voir l’état unread effacé.