Ho creato un sondaggio nel mio forum così:
[poll name=freestyle type=multiple results=always min=1 max=14 public=true chartType=bar]
* **#1** 
* **#2** 
[/poll]
Ho migrato da una CDN a nessuna CDN e gli URL sono cambiati da cdn.unicyclist.com a unicyclist.com.
Tuttavia, gli URL delle immagini qui rimangono rotti, nonostante appaiano correttamente nell’anteprima del post:
Ri-elaborare i post ed eseguire rake 'posts:remap[cdn.unicyclist.com,unicyclist.com]' non ha risolto il problema.
ask.discourse.org consiglia:
Cosa sta probabilmente accadendo
Le opzioni del tuo sondaggio non si trovano solo nel testo grezzo del post. Sullo schema del tuo sito, i sondaggi memorizzano anche l’HTML renderizzato delle opzioni in:
pollspoll_options.htmlQuindi l’anteprima del post può sembrare corretta, ma il renderizzatore del sondaggio potrebbe ancora utilizzare HTML obsoleto con il vecchio hostname della CDN.
Documentazione correlata:
- Creazione e gestione dei sondaggi
- Rimuovere DISCOURSE_CDN_URL
- Disabilitare la CDN causa la visualizzazione errata delle immagini con URL CDN
- Sostituire una stringa in tutti i post
Avviso importante
Esegui prima un backup completo.
Inoltre, evita di “modificare semplicemente” il sondaggio se ha voti, perché le modifiche ai sondaggi di solito azzerano i voti:
Approccio più sicuro: ispeziona prima un sondaggio rotto
Nel container:
cd /var/discourse ./launcher enter app rails cQuindi trova il sondaggio per quel post:
poll = Poll.find_by(post_id: POST_ID, name: "freestyle") PollOption.where(poll_id: poll.id).pluck(:id, :html)Se vedi
cdn.unicyclist.comin quell’HTML, ciò lo conferma.Correggi quel singolo sondaggio
poll = Poll.find_by(post_id: POST_ID, name: "freestyle") PollOption.where(poll_id: poll.id).find_each do |opt| new_html = opt.html.gsub("cdn.unicyclist.com", "unicyclist.com") opt.update_columns(html: new_html, updated_at: Time.zone.now) endQuindi ri-elabora anche quel post:
Post.find(POST_ID).rebake!Se funziona, correggi in blocco tutte le opzioni del sondaggio
PollOption.find_each do |opt| next unless opt.html.include?("cdn.unicyclist.com") opt.update_columns( html: opt.html.gsub("cdn.unicyclist.com", "unicyclist.com"), updated_at: Time.zone.now ) endPerché
posts:remapnon ha aiutatoPerché quel rake task è destinato al contenuto dei post, mentre i riferimenti alle immagini rotte sono probabilmente conservati nella cache HTML delle opzioni del sondaggio:
Raccomandazione
- testa su un sondaggio rotto
- conferma che le immagini vengano caricate
- solo allora esegui la correzione in blocco
Se vuoi, posso scriverti uno script pronto da copiare e incollare in cui devi solo sostituire
POST_IDed eseguirlo in sicurezza su un singolo sondaggio prima.
Ti sembra a posto? Farò ovviamente un backup prima, ma preferirei evitare di dover ripristinare il mio forum.
Devo mantenere tutti i risultati dei sondaggi ![]()
Domanda extra: Discourse dovrebbe gestire nativamente questi casi?
