Rifai tutti i post che corrispondono a un modello

:bookmark: Questa guida fornisce istruzioni su come rigenerare tutti i post in Discourse che corrispondono a una specifica stringa o espressione regolare, utilizzando la console Rails per opzioni avanzate aggiuntive.

:person_raising_hand: Livello utente richiesto: Amministratore

:warning: Necessario accesso alla console

Vuoi rigenerare tutti i post che corrispondono a una stringa o a un’espressione regolare? Iniziamo!

Accesso al tuo sito

Per iniziare, connettiti al tuo Droplet Discourse tramite SSH ed entra nel contenitore Docker per la tua istanza Discourse:

cd /var/discourse
./launcher enter app

Rigenerare tutti i post contenenti una stringa specifica

Utilizza il seguente comando, sostituendo pattern con la stringa che desideri cercare. Questa ricerca non distingue tra maiuscole e minuscole.

rake posts:rebake_match["pattern"]

Ad esempio, per rigenerare tutti i post contenenti :slight_smile: nel loro contenuto grezzo:

rake posts:rebake_match[":slight_smile:"]

Rigenerare tutti i post corrispondenti a un’espressione regolare

:information_source: PostgreSQL utilizza espressioni regolari POSIX per eseguire la corrispondenza regex. La ricerca non distingue tra maiuscole e minuscole. Viene applicato automaticamente un flag sensibile alle nuove righe ((?n)), il che significa che . non corrisponderĂ  ai caratteri di nuova riga e ^/$ corrisponderanno ai confini di riga.

Per le espressioni regolari, utilizza questo comando.

rake posts:rebake_match["pattern",regex]

Esempi:

  • Rigenerare i post contenenti :slight_smile: o Discourse:

    rake posts:rebake_match[":slight_smile:|Discourse",regex]
    
  • Rigenerare i post che iniziano con Oggi:

    rake posts:rebake_match["^Oggi",regex]
    
  • Rigenerare i post che iniziano con Oggi o Ieri:

    rake posts:rebake_match["^(Oggi|Ieri)",regex]
    

Ritardo opzionale tra le rigenerazioni

Per aggiungere un ritardo di 5 secondi tra ogni esecuzione della rigenerazione, modifica il comando come segue. Regola 5 con il numero di secondi necessario:

rake posts:rebake_match["pattern",string,5]

Avanzato: Utilizzo della console Rails

Per attività in cui il task rake non è sufficiente, utilizza la console Rails.

Accesso alla console Rails

All’interno del contenitore Docker, avvia la console Rails:

rails c

Utilizzo del task rake rebake_uncooked

Imposta i post selezionati su ‘uncooked’ per una rigenerazione. Esci dalla console Rails dopo aver eseguito la configurazione, quindi esegui il comando di rigenerazione:

Per rigenerare un’intera categoria:

rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts

Esecuzione di un ciclo nella console Rails

Per eseguire operazioni granulari, seleziona i post come un array e rigenera ogni post direttamente.

Post di un utente specifico

user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
  p.rebake!
end

Post contenenti una stringa specifica

posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
  p.rebake!
end
40 Mi Piace

Esiste un modo semplice per “scuocere” tutti i post/thread creati prima di una data specifica?