Questo non permetterà a Discourse di scaricare quelle immagini in modo che tu le abbia quando non saranno più disponibili da photobucket, ma le visualizzerà.
Quindi vorresti andare in rails, ottenere tutti i post che hanno ^https://hosting.photobucket.com, e fare un gsub per sostituire quegli URL spogli con .
Aspetta. Quando ho scritto questo la prima volta, l’URL in alto non veniva visualizzato, ma poi in seguito sembra che Discourse sia riuscito a scaricarlo! (E ha funzionato anche sul mio server di test!)
Devo eseguire un comando rails per trovare tutti quei post e poi usare gsub per sostituire [URL…][/URL] con solo l’URL effettivo in modo che venga visualizzato in un one-box
DiscourseHelper:
Ricerca
Ricerca per: Come posso usare un comando o codice console Rails per trovare tutti i post contenenti un formato di stringa specifico come i tag [URL] e quindi sostituire quei tag con solo l'URL contenuto in Discourse?
Per trovare tutte le istanze di [URL]...[/URL] e sostituirle con solo l’URL contenuto nei tuoi post di Discourse, puoi farlo usando Rails nella console di Discourse. Ecco come puoi fare:
Passaggi:
Accedi alla Console Rails:
Hai bisogno dell’accesso SSH al tuo server. Esegui il seguente comando per accedere alla console Rails di Discourse:
cd /var/discourse
./launcher enter app
rails c
Esegui un Comando Trova e Sostituisci:
Usa il seguente snippet di codice per individuare i post contenenti [URL]...[/URL] e sostituirli.
Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_cooked != post.cooked
post.update!(cooked: updated_cooked)
PostRevisor.new(post, Discourse.system_user).revise!(
post.user,
{ cooked: updated_cooked },
revised_at: Time.now
)
puts "Aggiornato post id: #{post.id}"
end
end
Testa lo Script:
Prima di sostituire il contenuto in blocco, esegui la logica gsub su un singolo post per assicurarti che si comporti come previsto.
test_post = Post.first # Sostituisci con un ID per un test migliore
puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
Esegui lo Script e Monitora:
Esegui lo script completo, monitora l’output e correggi eventuali errori se necessario.
Note:
Questo script utilizza Regex (\[URL=.*?\\](.*?)\\[\\/URL\\]) per trovare e sostituire il modello specificato. Assicurati che il modello corrisponda esattamente alle tue esigenze.
Utilizza PostRevisor per garantire che le modifiche vengano registrate nella cronologia delle modifiche del post.
Assicurati di testare a fondo e di eseguire il backup del tuo database prima di eseguire qualsiasi modifica in blocco.
Per ulteriore assistenza, consulta la documentazione correlata su meta.discourse.org. Se riscontri problemi, non esitare a condividere i dettagli qui!
pfaffman:
Deve sostituirli in raw, non in cooked
DiscourseHelper:
Grazie per la precisazione! Poiché le modifiche devono essere apportate al campo raw (contenuto originale del post), possiamo modificare lo script per lavorare invece con il campo raw. Ecco come puoi ottenerlo:
Comando Rails Aggiornato per il Campo raw
Modifica ed Esegui lo Script:
Di seguito è riportato lo script aggiornato per elaborare e sostituire i tag [URL]...[/URL] nel campo raw dei post:
# Trova tutti i post in cui raw include il tag [URL]
Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_raw != post.raw
# Aggiorna il contenuto raw
post.update!(raw: updated_raw, cooked: nil)
# Attiva il rebake per rigenerare il contenuto cotto
post.rebake!
puts "Aggiornato post id: #{post.id}"
end
end
Spiegazione delle Modifiche:
raw invece di cooked: Il campo raw contiene il contenuto originale del post, quindi l’operazione gsub viene applicata al testo raw.
Reset cooked: Impostare cooked su nil garantisce che il post venga correttamente rielaborato (processato).
rebake!: Questo attiva il processo di rielaborazione, che rigenera la versione cooked (renderizzata in HTML) del post dal contenuto raw aggiornato.
Testa il Gsub per il Contenuto Raw:
Testa la sostituzione dell’espressione regolare su un singolo post per assicurarti che si comporti correttamente:
test_post = Post.first # Sostituisci con un ID di post appropriato per il test
puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
Esegui l’Aggiornamento in Blocco:
Una volta confermato che funziona come previsto, puoi eseguire lo script per elaborare tutti i post contenenti i tag [URL].
Monitora e Verifica:
Monitora l’output dello script. Per ogni post aggiornato, il suo id verrà stampato sulla console. Al termine, controlla alcuni post sul sito per assicurarti che le modifiche vengano visualizzate correttamente.
Promemoria Backup:
Prima di eseguire lo script, assicurati di avere un backup completo del database, specialmente quando lavori con aggiornamenti in blocco.
Se hai ulteriori domande o riscontri problemi, non esitare a chiedere!
E mi piace che utilizzi PostRevisor in modo che se qualcosa va storto, avrai una registrazione della modifica.
Vuoi assolutamente testarlo su alcuni post prima di rilasciarlo, e anche vedere quanti post risolverà e chi riceverà notifiche per tutti quelli (c’è qualcosa come bypass_bump o simile che salta le notifiche, credo).