J’ai créé un sondage sur mon forum comme ceci :
[poll name=freestyle type=multiple results=always min=1 max=14 public=true chartType=bar]
* **#1** 
* **#2** 
[/poll]
J’ai migré d’un CDN vers l’absence de CDN, et les URLs ont été modifiées de cdn.unicyclist.com vers unicyclist.com.
Cependant, les URLs des images ici restent cassées, bien qu’elles apparaissent dans l’aperçu du message :
Le retraitement des messages et l’exécution de rake 'posts:remap[cdn.unicyclist.com,unicyclist.com]' n’ont pas résolu le problème.
ask.discourse.org conseille :
Ce qui se passe probablement
Les options de votre sondage ne sont pas seulement dans le texte brut du message. Sur le schéma de votre site, les sondages stockent également le HTML rendu des options dans :
pollspoll_options.htmlAinsi, l’aperçu du message peut sembler correct, mais le rendu du sondage peut toujours utiliser un HTML obsolète avec l’ancien nom de domaine du CDN.
Documentation associée :
- Création et gestion des sondages
- Supprimer DISCOURSE_CDN_URL
- Désactiver le CDN entraîne l’impossibilité d’afficher les anciennes images avec l’URL du CDN
- Remplacer une chaîne dans tous les messages
Avertissement important
Faites d’abord une sauvegarde complète.
De plus, évitez de « simplement modifier » le sondage s’il a des votes, car les modifications de sondage effacent normalement les votes :
Approche plus sûre : inspectez d’abord un sondage cassé
Dans le conteneur :
cd /var/discourse ./launcher enter app rails cEnsuite, trouvez le sondage pour ce message :
poll = Poll.find_by(post_id: POST_ID, name: "freestyle") PollOption.where(poll_id: poll.id).pluck(:id, :html)Si vous voyez
cdn.unicyclist.comdans ce HTML, cela le confirme.Réparez ce sondage
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) endEnsuite, retraiter également ce message :
Post.find(POST_ID).rebake!Si cela fonctionne, corrigez en lot toutes les options de sondage
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 ) endPourquoi
posts:remapn’a pas aidéParce que cette tâche rake est destinée au contenu des messages, tandis que vos références d’images cassées se trouvent probablement dans le cache HTML des options de sondage :
Recommandation
- testez sur un seul sondage cassé
- confirmez que les images se chargent
- uniquement ensuite, exécutez la correction en lot
Si vous le souhaitez, je peux vous écrire un script à copier-coller où vous ne devez remplacer que
POST_IDet l’exécuter en toute sécurité sur un seul sondage d’abord.
Cela vous semble-t-il correct ? Je ferai bien sûr une sauvegarde au préalable, mais je préfère éviter de devoir restaurer mon forum.
Je dois conserver tous les résultats des sondages ![]()
Question bonus : Discourse devrait-il gérer nativement ces cas ?
