Mettre à jour les URL dans un sondage après avoir changé le CDN

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** ![DSC_2281.jpg|332x500, 33%](upload://ujMDcnd4syevNGdEN2O1qUTeWeK)
* **#2** ![IMG_3248.jpg|690x459, 33%](upload://tsecEjlruXEpg3faidWmENBupM4)
[/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 :

  • polls
  • poll_options.html

Ainsi, 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 :

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 c

Ensuite, 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.com dans 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)
end

Ensuite, 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
  )
end

Pourquoi posts:remap n’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

  1. testez sur un seul sondage cassé
  2. confirmez que les images se chargent
  3. 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_ID et 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 :slight_smile:

Question bonus : Discourse devrait-il gérer nativement ces cas ?