Impossibile annullare l'eliminazione dei post della descrizione della categoria creati da un utente eliminato

In un secondo momento, dopo che alcune categorie sono state create, l’utente che le aveva create è stato eliminato. Esaminando il registro, vedo che Discourse ha eliminato automaticamente quei post nello stesso momento in cui è stato eliminato l’utente.

Non abbiamo notato che questo avesse causato problemi fino a qualche tempo dopo, quando è emerso che, sebbene gli amministratori possano ancora vedere (e modificare) i post con la descrizione delle categorie interessate, quando gli utenti normali provano a visualizzarli, ottengono invece questo messaggio: “Errore; durante il caricamento; Qualcosa è andato storto.”

Questi post con la descrizione delle categorie appaiono con uno sfondo rosso. Posso vedere che sono stati eliminati e quando. Vedo il pulsante “ripristina”, ma cliccarlo non ha alcun effetto.

Se vado alle impostazioni di una delle categorie interessate (cliccando sul suo pulsante Modifica) e poi sul pulsante Modifica descrizione, vengo portato al post eliminato corrispondente. Posso apportare modifiche e salvarle, e dopo aver aggiornato la pagina, la nuova descrizione appare. Ma gli utenti non amministratori non riescono comunque a vedere il contenuto del post (vedono solo quell’errore).

Sono riuscito a cambiare la proprietà di uno dei post sul mio utente amministratore, ma il pulsante ripristina non funziona ancora.

Ho trovato rapporti simili su meta Discourse, ma finora nessun consiglio si è rivelato utile.

Ho trovato un riferimento a una persona che è riuscita a ripristinare un post con problemi simili utilizzando l’API di Discourse e ho iniziato a indagare, ma non sono riuscito a trovare nulla riguardo al ripristino dei post nella documentazione dell’API. Vedi Can't recover a topic by a deleted user

Spero che esista una soluzione che non richieda di ricreare da zero le categorie interessate.

Aggiornamento: quando clicco sul pulsante ripristina per uno di questi post, viene generata una voce nel registro degli errori:

Url: mysite/assets/ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js
Linea: 1
Colonna: 266460
Posizione della finestra: mysite/t/about-the-showcases-and-use-cases-category/28```
3 Mi Piace

Quindi qualcuno ha eseguito un comando di eliminazione sull’utente che ha creato le categorie? C’è una ragione specifica per cui questo utente è stato eliminato invece di essere anonimizzato?

È vero che l’argomento con la descrizione della categoria sarà di proprietà dell’utente che crea la categoria, quindi eliminare quell’utente (e tutti i suoi post) potrebbe potenzialmente causare questo problema. @tshenry possiamo testare questo scenario la prossima settimana?

3 Mi Piace

Sono riuscito a testarlo rapidamente ora e a riprodurre gli stessi risultati.

  1. Crea una categoria con un utente amministratore
  2. Revoca lo status di amministratore e elimina l’utente
  3. L’argomento “Informazioni” della categoria viene eliminato logicamente (soft-deleted) quando l’utente viene rimosso
  4. Tentare di annullare l’eliminazione/ripristinare l’argomento non funziona
  5. Cambiare il proprietario funziona tecnicamente, ma l’argomento rimane in uno strano stato di eliminazione indipendentemente da ciò che fai dall’interfaccia utente.

Dalla console sembra che il record posts associato all’argomento venga eliminato quando l’utente viene rimosso. Il record dell’argomento mostra molti 0 quando si esaminano vari attributi correlati ai post.

Potrebbe valere la pena far valutare a un ingegnere se possiamo gestire la situazione in modo più elegante, ma temo che sia più facile a dirsi che a farsi.


Sono riuscito a trovare una soluzione alternativa per tornare a una situazione corretta, ma ho dovuto utilizzare la riga di comando. @jrivettcsa ti consiglio di eseguire un backup prima di provare questo:

Valori necessari

Assicurati di copiare eventuali contenuti dell’argomento “Informazioni” che desideri conservare in un blocco note o simile, poi procedi con quanto segue:

Accedi alla console Rails

cd /var/discourse
./launcher enter app
rails c

Sostituisci <ABOUT_TOPIC_ID> nel comando sottostante con l’ID dell’argomento “Informazioni” della categoria, quindi esegui per eliminare definitivamente l’argomento danneggiato.

Topic.where(id: <ABOUT_TOPIC_ID>).destroy_all

Premi il tasto q per tornare alla console se necessario

La categoria è ancora associata all’argomento danneggiato, quindi dobbiamo rimuoverla. Sostituisci <CATEGORY_ID> nel comando sottostante con l’ID della categoria, quindi esegui.

Category.where(id: <CATEGORY_ID>).update_all(topic_id: nil)

Premi il tasto q per tornare alla console se necessario

Esci dalla console Rails ed esegui il seguente task rake per creare un nuovo argomento “Informazioni” per la categoria:

exit
rake categories:create_definition

Ora la categoria dovrebbe essere riparata! Puoi ripetere la procedura quanto necessario.

6 Mi Piace

Sì, sono state apportate alcune modifiche sfortunate da qualcuno che avrebbe dovuto sapere meglio. Non posso dire altro. Fortunatamente, queste cose vengono registrate da Discourse.

1 Mi Piace

Grazie per aver confermato il problema e fornito una soluzione. Proverò e pubblicherò i risultati qui.

1 Mi Piace

Questa soluzione ha funzionato perfettamente. Grazie!

Ho corretto ognuno singolarmente, ma credo che avrei potuto eseguire le operazioni destroy_all e update_all in un’unica sessione di rails console, per poi lanciare il comando rake categories:create_definition una sola volta alla fine. Che ne pensi? Potrebbe far risparmiare qualche minuto a qualcuno in futuro.

4 Mi Piace

È sicuramente un bug, @jrivittcsa: quando l’eliminazione di un utente può causare il malfunzionamento del sito, è un problema! Lo risolveremo.

4 Mi Piace

Grazie per aver segnalato il problema. Ho apportato una correzione in questa PR

Quando un utente viene eliminato, il post che descrive la categoria non viene più cancellato. Invece, l’autore del post viene modificato dall’utente originale all’utente di sistema.

4 Mi Piace