Ok, questo script di Rails agirà come un “segna tutto come letto” globale e forzerà il conteggio dei non letti a 0 per tutti gli utenti; quindi, purtroppo, cancellerà sia i conteggi legittimi di non letti che eventuali non letti fantasma. Possiamo farlo con un comando SQL in Rails. Ma nota che non risolve il bug alla radice. Inoltre, è un’ottima idea se hai un backup recente a portata di mano, ma l’ho testato sul mio forum di sviluppo e ha funzionato.
cd /var/discourse
./launcher enter app
rails c
incolla l’intero blocco seguente e premi Invio
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) -- Tracking, Watching, Watching First Post
SQL
# esegui l'aggiornamento
result = ActiveRecord::Base.connection.execute(sql)
puts "Puliti con successo #{result.cmd_tuples} argomenti non letti a livello di sito."
# forza i browser client a cancellare il loro stato in cache e sincronizzarsi con il database
MessageBus.publish("/topic-tracking-state", { clear: true })
gli utenti potrebbero dover eseguire un aggiornamento forzato per vedere lo stato dei non letti cancellato.