우리는 메인 페이지에서 타일(tiles)을 사용하여 Topic List Previews (legacy) 플러그인을 사용하고 있습니다. 어제 TPL과 무관한 이유로 인스턴스를 재구축해야 했습니다. Discourse 코어에서 섬네일 백엔드가 변경된다는 사실을 알고 있었고, 업그레이드 시 섬네일 문제가 발생할 수 있다는 점도 인지하고 있었습니다. 그럼에도 불구하고 진행해야만 했습니다.
어쨌든, 재구축(포스트그레SQL 업그레이드 포함) 이후 원박스(oneboxes)에서 가져온 모든 섬네일이 사라졌습니다. 문제는 아니었습니다. 모든 게시물을 다시 생성(rebake)했고, 대부분의 섬네일이 다시 나타났습니다(좋았습니다) 하지만 모두는 아니었습니다(흥미롭지만 나쁜 상황). 혹시 모르니 몇 번 더 다시 생성해 보았지만, 주제 페이지에서는 원박스가 정상적으로 렌더링되더라도 메인 페이지에서 섬네일이 표시되지 않는 게시물이 여전히 남아 있습니다.
현재까지 발견된 두 가지 패턴:
Soundcloud 원박스는 정상적으로 렌더링되지만, 섬네일이 체계적으로 누락됩니다(„섬네일 선택
TLP는 이를 약간 수정하지만, 이는 단순히 기준을 완화하기 위한 것입니다. 가능하다면 이 오버라이드를 완전히 제거하고 싶습니다:
def extract_images_for_post
# src 속성이 있는 모든 이미지
@doc.css("img[src]") -
# 이모지 제외
@doc.css("img.emoji") -
# 인용문 안의 이미지 제외
@doc.css(".quote img") -
# 원박스 사이트 아이콘 제외
@doc.css("img.site-icon") -
# 원박스 아바타 제외
@doc.css("img.onebox-avatar") # Discourse Core보다 더 넓은 기준
end
한눈에 봐도 그것은 YouTube 원박스가 아닌 것 같습니다. 누군가 게시글에 YouTube 임베딩(raw) 코드를 사용한 것으로 의심됩니다. 원박스로 변환하면 썸네일이 정상적으로 작동할 것입니다.
이 기능이 이전의 TLP 플러그인에서는 정상 작동했습니까? Soundcloud 원박스는 iframe이므로, 선택 기준을 업데이트하더라도 어떻게 썸네일 이미지를 가져올 수 있을지 이해하기 어렵습니다. @merefield TLP에 Soundcloud에 특화된 로직이 어딘가에 있었나요?
네, 원박스(oneboxes) 주위에 일부 커스텀 로직이 있었지만, 이것이 SoundCloud만을 위한 것은 아니었습니다:
if @has_oneboxes
cooked = PrettyText.cook(@post.raw)
if img
## 이미지를 식별하기 위해 더 구체적인 것이 필요합니다
img_id = img
src = img.attribute("src").to_s
img_id = src.split('/').last.split('.').first if src
end
prior_oneboxes = []
Oneboxer.each_onebox_link(cooked) do |url, element|
if !img || (img && cooked.index(element).to_i < cooked.index(img_id).to_i)
html = Nokogiri::HTML::fragment(Oneboxer.cached_preview(url))
prior_oneboxes = html.css('img')
end
end
if prior_oneboxes.any?
prior_oneboxes = prior_oneboxes.reject do |html|
class_str = html.attribute('class').to_s
class_str.include?('site-icon') || class_str.include?('avatar')
end
if prior_oneboxes.any? && validate_image_for_previews(prior_oneboxes.first)
img = prior_oneboxes.first
end
end
end
즉각적인 변화는 없었습니다. HTML을 다시 빌드해도 바로 바뀌지 않았지만, Sidekiq을 확인해 보니 관련 작업 하나가 예약되어 있었습니다. 4분간 인내심을 갖고 기다린 후, 이제 썸네일이 사용 가능해졌고 메인 페이지에 표시되고 있습니다. 일요일에 이렇게 빠르게 답장해 주셔서 감사합니다, @david님!
그렇습니다. 불행히도 스크린샷을 남겨 놓지 않았습니다. 메인 페이지에서는 원박스 왼쪽에 이미지가 표시되었습니다.