Récupérer un long sujet qui a été supprimé

Sur nos forums, nous avions un long sujet avec plus de 300 messages concernant un client commercial en développement web. Pour une raison inconnue, ce sujet entier a disparu il y a quelques jours, après le déplacement de quelques messages vers un autre sujet.

J’ai consulté le journal d’activité des utilisateurs, mais il ne contenait aucune entrée indiquant la suppression ou la modification de ce sujet désormais « manquant ». La seule action enregistrée était le déplacement d’une dizaine de messages (environ 10) vers un nouveau sujet.

Aujourd’hui, j’ai vérifié la base de données Discourse et constaté que les 306 messages étaient toujours présents, mais lorsque j’ai examiné le topic_id de ces 306 messages, le sujet correspondant à cet identifiant était vide : [].

Supposons que l’enregistrement du sujet manquant ait eu l’identifiant topic_id « 300000 » dans les enregistrements des messages.

Lorsque j’ai exécuté les commandes suivantes dans la console, voici les résultats :

> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306

J’ai restauré ces 306 messages dans un nouveau sujet en créant un sujet « fictif » (espace réservé) via l’interface utilisateur de Discourse, puis en modifiant tous les topic_id des messages « orphelins » pour qu’ils pointent vers le nouvel identifiant du sujet espace réservé, comme suit :

Disons que le nouveau sujet créé (le sujet fictif) a l’identifiant : 304000. Alors :

Post.where(topic_id: 300000).update_all(topic_id: 304000)

Cela a fonctionné et a restauré les 306 messages dans le nouvel identifiant de sujet espace réservé/fictif.

Ensuite, j’ai simplement modifié le titre du nouveau sujet et tout semble correct. Comme nous n’avions aucun lien vers ce long sujet privé, il n’y avait pas de risque de rompre des liens en raison d’un nouvel identifiant de sujet, donc tout est bon.

Je ne sais pas pourquoi l’enregistrement du sujet était vide alors que tous les messages associés à cet identifiant de sujet étaient intacts. Les enregistrements et les journaux ne montrent aucune action (suppression, modification) sur ce sujet. La seule action sur ce sujet était le déplacement d’une poignée de messages vers un nouveau sujet, mais cela n’aurait pas dû « annuler » l’enregistrement du sujet.

Puisque je ne peux pas reproduire ce problème (et que je ne suis pas sûr de ce qui s’est passé), je ne l’ai pas signalé comme un « bug » ; j’ai plutôt attendu d’avoir du temps aujourd’hui, effectué des recherches et constaté que les 306 messages avaient perdu leur sujet parent « quelqu’un » ; mais cette technique les a tous restaurés.

Si j’avais voulu conserver l’identifiant original du sujet, j’aurais essayé de restaurer l’enregistrement original du sujet, mais cela semble demander un peu plus de travail. J’ai donc simplement assigné les 306 messages « sans sujet » à un nouveau sujet, avec les résultats attendus :

> Post.where(topic_id:304000).count
> 307

J’espère que cela aidera toute personne qui pourrait rencontrer une situation similaire à l’avenir.

2 « J'aime »