포럼에 다음과 같은 투표(poll)를 생성했습니다:
[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은 여전히 깨져 있습니다:
게시글을 다시 베이킹(Rebake)하고 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
중요한 경고
먼저 전체 백업을 취하십시오.
또한, 투표가 있는 경우 투표를 "그냥 편집"하는 것을 피하십시오. 투표 편집은 일반적으로 표을 초기화하기 때문입니다:
더 안전한 접근법: 먼저 깨진 투표 하나를 검사하기
컨테이너에서:
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을 본다면, 이것이 확인되는 것입니다.그 투표 하나를 수정하기
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그런 다음 해당 게시글도 다시 베이킹(Rebake)합니다:
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 캐시에 남아 있을 것입니다:
권장 사항
- 하나의 깨진 투표에서 테스트하기
- 이미지가 로드되는지 확인하기
- 그때만 일괄 수정 실행하기
원하시면
POST_ID만 교체하면 되는 복사-붙여넣기 스크립트를 작성해 드릴 수 있습니다. 먼저 단일 투표에서 안전하게 실행해 보세요.
이것은 괜찮아 보이나요? 물론 먼저 백업을 하겠지만, 포럼을 복원해야 하는 상황을 피하고 싶습니다.
모든 투표 결과를 유지해야 합니다 ![]()
보너스 질문: Discourse가 이러한 경우를 기본적으로 처리해야 하나요?
