ok, este script de Rails actuará como un “marcar todo como leído” global y forzará el conteo de no_leídos de vuelta a 0 para todos los usuarios, por lo que, lamentablemente, borrará cualquier conteo legítimo de no leídos además de cualquier no leído fantasma. Podemos hacer esto con un comando SQL en Rails. Pero ten en cuenta que no soluciona el error raíz. Además, buena idea si tienes una copia de seguridad reciente a mano, pero lo probé en mi foro de desarrollo y funcionó.
cd /var/discourse
./launcher enter app
rails c
pega todo el siguiente bloque y presiona Enter
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) -- Rastreo, Observando, Observando primer mensaje
SQL
# ejecutar la actualización
result = ActiveRecord::Base.connection.execute(sql)
puts "Se limpiaron correctamente #{result.cmd_tuples} temas no leídos en todo el sitio."
# forzar a los navegadores cliente a descartar su estado en caché y sincronizarse con la base de datos
MessageBus.publish("/topic-tracking-state", { clear: true })
los usuarios pueden tener que hacer una recarga forzada para ver el estado de no_leídos limpiado.