Nei nostri forum, avevamo un lungo argomento con oltre 300 messaggi riguardanti un cliente commerciale di sviluppo web e, per qualche motivo, quell’intero argomento è scomparso qualche giorno fa dopo aver spostato alcuni messaggi in un altro argomento.
Ho controllato il registro delle attività degli utenti e non risultavano voci relative all’eliminazione o alla modifica di quell’argomento ora “mancante”. L’unica azione registrata era lo spostamento di alcuni messaggi (circa 10) in un nuovo argomento.
Oggi ho controllato il database di Discourse e ho scoperto che tutti i 306 messaggi erano presenti, ma quando ho verificato il topic_id in quei 306 messaggi, l’argomento con quell’ID risultava vuoto [].
Supponiamo che il record dell’argomento mancante fosse il topic_id “300000” nei record dei messaggi.
Ecco i risultati ottenuti eseguendo questo comando nella console:
> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306
Ho ripristinato tutti questi 306 messaggi in un nuovo argomento; creando un argomento “fittizio” (segnaposto) nell’interfaccia utente di Discourse e modificando quindi tutti i topic_id dei messaggi “orfani” con il nuovo ID del segnaposto, come segue:
Supponiamo che il nuovo argomento creato (l’argomento fittizio) abbia l’ID: 304000, allora:
Post.where(topic_id: 300000).update_all(topic_id: 304000)
Questo ha funzionato e ha ripristinato tutti i 306 messaggi al nuovo ID dell’argomento segnaposto/fittizio.
Successivamente, ho semplicemente modificato il titolo del nuovo argomento e tutto sembra a posto; dato che non avevamo alcun link a questo lungo argomento privato, non c’era preoccupazione di rompere i link con un nuovo ID argomento, quindi tutto è a posto.
Non ho idea del perché il record dell’argomento fosse vuoto e tutti i messaggi con quell’ID argomento fossero intatti. I record e i registri non mostrano alcuna azione (eliminazione, modifica) su quell’argomento. L’unica azione su quell’argomento era lo spostamento di una manciata di messaggi in un nuovo argomento, ma ciò non avrebbe dovuto “azzerare” il record dell’argomento.
Poiché non posso riprodurre questo evento (e non sono sicuro di cosa sia successo), non l’ho segnalato come “bug”; invece ho semplicemente aspettato di avere tempo oggi, ho fatto alcune ricerche e ho scoperto che i 306 messaggi avevano perso il loro argomento genitore “qualcuno”; ma questa tecnica li ha tutti ripristinati.
Se avessi voluto preservare l’ID originale dell’argomento, avrei provato a ripristinare il record originale dell’argomento, ma questo sembra richiedere un po’ più di lavoro; quindi ho semplicemente assegnato i 306 messaggi “senza argomento” a un nuovo argomento, e i risultati, come previsto:
> Post.where(topic_id:304000).count
> 307
Spero che questo possa aiutare chiunque possa incontrare una situazione simile in futuro.