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.
Livello utente richiesto: Amministratore
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
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:oDiscourse: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
OggioIeri: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