フォーラムで以下のようなアンケートを作成しました:
[poll name=freestyle type=multiple results=always min=1 max=14 public=true chartType=bar]
* **#1** 
* **#2** 
[/poll]
CDNからCDNなしへ移行し、URLは cdn.unicyclist.com から unicyclist.com に変更されました。
しかし、投稿プレビューでは正しく表示されているにもかかわらず、ここでの画像URLは壊れたままです:
投稿の再ビルド(rebaking)や rake 'posts:remap[cdn.unicyclist.com,unicyclist.com]' の実行でも修正されませんでした。
ask.discourse.org は以下のようにアドバイスしています:
何が起きているのか
アンケートのオプションは、投稿の生データ(raw)だけでなく、サイトスキーマ上でも保存されています。アンケートでは、レンダリングされたオプションのHTMLを以下に保存します:
pollspoll_options.htmlそのため、投稿プレビューは正常に見えても、アンケートレンダラーは古いCDNホスト名を含む古びたHTMLを使用し続けている可能性があります。
関連ドキュメント:
- Creating and managing polls
- Remove DISCOURSE_CDN_URL
- Disable CDN causes old images with CDN URL can not be shown
- Replace a string in all posts
重要な警告
まず完全なバックアップを取ってください。
また、投票がある場合はアンケートを「ただ編集」しないでください。アンケートの編集は通常、投票をクリアするためです:
より安全なアプローチ:壊れたアンケートを1つだけ調査する
コンテナ内で:
cd /var/discourse ./launcher enter app rails cその後、その投稿のアンケートを見つけます:
poll = Poll.find_by(post_id: POST_ID, name: "freestyle") PollOption.where(poll_id: poll.id).pluck(:id, :html)そのHTMLに
cdn.unicyclist.comが含まれている場合、それが原因です。その1つのアンケートを修正する
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その後、その投稿も再ビルドします:
Post.find(POST_ID).rebake!成功したら、すべてのアンケートオプションを一括修正する
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なぜ
posts:remapが役に立たなかったのかそのrakeタスクは投稿コンテンツ用であり、壊れた画像参照はおそらくアンケートオプションのHTMLキャッシュにあるからです:
推奨事項
- 1つの壊れたアンケートでテストする
- 画像が読み込まれることを確認する
- その後、一括修正を実行する
よければ、
POST_IDだけを置き換えて、最初に1つのアンケートで安全に実行できるコピー&ペースト用スクリプトを作成します。
これは大丈夫そうですか? もちろんまずバックアップを取りますが、フォーラムを復元する必要がないようにしたいです。
すべてのアンケートの結果を保持する必要があります ![]()
ボーナス質問:Discourse はこうしたケースをネイティブに処理すべきでしょうか?
