2004년부터 운영해 온 사진 포럼이 있으며, Photobucket를 사용하는 회원들이 많습니다… 하지만 Photobucket가 포함된 오래된 게시글의 이미지들이 게시글에 표시되지 않습니다… (https://forum.fotografos.online/t/metro-de-nyc/222752/3)
Photobucket에 대한 지원이 있거나, 원박스(onebox) 허용 도메인 목록에 이 도메인을 추가할 방법이 있을까요?
2004년부터 운영해 온 사진 포럼이 있으며, Photobucket를 사용하는 회원들이 많습니다… 하지만 Photobucket가 포함된 오래된 게시글의 이미지들이 게시글에 표시되지 않습니다… (https://forum.fotografos.online/t/metro-de-nyc/222752/3)
Photobucket에 대한 지원이 있거나, 원박스(onebox) 허용 도메인 목록에 이 도메인을 추가할 방법이 있을까요?
Photobucket은 해당 이미지들을 임베드하는 것을 원하지 않습니다:
하지만 이렇게 하면:

이렇게 됩니다:
이 방식은 Discourse가 Photobucket에서 더 이상 사용할 수 없게 되었을 때에도 이미지를 보유할 수 있도록 다운로드하지는 않지만, 이미지는 표시합니다.
따라서 rails로 들어가서 ^https://hosting.photobucket.com를 포함한 모든 게시물들을 가져와서, gsub를 사용하여 해당 맨 URL들을 로 교체해야 합니다.
잠깐요. 처음 이 글을 썼을 때는 위의 URL이 렌더링되지 않았는데, 나중에 보니 Discourse가 실제로 다운로드하는 데 성공한 것 같습니다! (테스트 서버에서도 작동했습니다!)
아마 게시물들을 다시 rebake(재처리)하면 될지도 모릅니다.
하지만 당신의 사이트에서는 작동하지 않습니다: https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420
로컬 다운로드를 비활성화해 두셨나요?
로컬로 다운로드 - 저는 그게 뭔지 몰랐어요 ![]()
관리자라면 아래 링크를 볼 수 있습니다.
해당 기능이 비활성화되어 있다면 활성화한 후, 제가 만든 주제에 가서
아이콘을 클릭하고, "HTML 재구축"으로 번역되는 항목을 선택하세요.
방금 관리자 화면에서 활성화하고 원래 게시글로 가서 재구성을 시도해 봤는데… 작동하지 않았습니다…
그 게시글에서는 잘 작동했습니다.
그것은 원래 게시물에서 URL로 인코딩되어 있기 때문입니다: https://forum.fotografos.online/posts/1579128.json
예를 들어
1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]
따라서 마이그레이션을 수행할 때 실제로는 이것들을 수정하고 싶었던 것이지만, 레일즈에서 작업을 실행하여 여전히 수정할 수 있습니다.
https://ask.discourse.com/에서 질문을 해보았는데, 한 번 시행착오를 거친 후 이렇게 답변을 받았습니다:
pfaffman:
아래와 같은 형태의 게시물이 여러 개 있습니다:
1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]
이 모든 게시물을 찾아서 gsub를 사용해 [URL...][/URL] 태그를 실제 URL만 남도록 교체해야 합니다. 그래야 one-box로 렌더링되거든요.
DiscourseHelper:
검색 내용: Discourse에서 [URL] 태그와 같은 특정 문자열 형식을 포함하는 모든 게시물을 Rails 명령어나 콘솔 코드로 찾아내어, 해당 태그를 포함되는 URL만으로 교체하는 방법은 무엇인가요?
Discourse 게시물에서 [URL]...[/URL]의 모든 인스턴스를 찾아내어 포함된 URL만으로 교체하려면 Discourse 콘솔에서 Rails를 사용하면 됩니다. 방법은 다음과 같습니다:
Rails 콘솔 접근:
서버에 대한 SSH 접근 권한이 필요합니다. 다음 명령어를 실행하여 Discourse Rails 콘솔에 접근하세요:
cd /var/discourse
./launcher enter app
rails c
찾아내기 및 교체 명령 실행:
[URL]...[/URL]을 포함하는 게시물을 찾아 교체하려면 다음 코드 스니펫을 사용하세요.
Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_cooked != post.cooked
post.update!(cooked: updated_cooked)
PostRevisor.new(post, Discourse.system_user).revise!(
post.user,
{ cooked: updated_cooked },
revised_at: Time.now
)
puts "Updated post id: #{post.id}"
end
end
스크립트 테스트:
대량으로 내용을 교체하기 전에, gsub 로직이 의도대로 작동하는지 단일 게시물에서 테스트하세요.
test_post = Post.first # 더 나은 테스트를 위해 ID로 대체하세요
puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
스크립트 실행 및 모니터링:
전체 스크립트를 실행하고 출력을 모니터링한 후, 필요한 경우 오류를 수정하세요.
참고:
\[URL=.*?\](.*?)\[\/URL\])을 사용합니다. 패턴이 요구사항과 정확히 일치하는지 확인하세요.PostRevisor를 사용합니다.추가적인 가이드라인은 meta.discourse.org의 관련 문서를 확인하세요. 문제가 발생하면 여기에서 자세히 공유해 주세요!
pfaffman:
cooked가 아니라 raw에서 그것들을 교체해야 합니다.
DiscourseHelper:
정확히 말씀해 주셔서 감사합니다! 변경 사항이 raw(원본 게시물 내용)에 적용되어야 하므로, raw 필드를 다루도록 스크립트를 수정할 수 있습니다. 방법은 다음과 같습니다:
raw 필드를 위한 업데이트된 Rails 명령어스크립트 수정 및 실행:
아래는 게시물의 raw 필드에서 [URL]...[/URL] 태그를 처리하고 교체하도록 업데이트된 스크립트입니다:
# raw에 [URL] 태그가 포함된 모든 게시물 찾기
Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
if updated_raw != post.raw
# raw 내용 업데이트
post.update!(raw: updated_raw, cooked: nil)
# cooked 내용 재생성을 위해 rebake 트리거
post.rebake!
puts "Updated post id: #{post.id}"
end
end
변경 사항 설명:
cooked 대신 raw: raw 필드에는 원본 게시물 내용이 포함되어 있으므로, gsub 연산이 raw 텍스트에 적용됩니다.cooked 초기화: cooked를 nil로 설정하면 게시물이 올바르게 rebake(처리)되도록 보장합니다.rebake!: 이는 rebaking 프로세스를 트리거하여 업데이트된 raw 내용에서 게시물의 cooked(HTML 렌더링) 버전을 재생성합니다.Raw 내용을 위한 Gsub 테스트:
정규식 치환이 올바르게 작동하는지 단일 게시물에서 테스트하세요:
test_post = Post.first # 테스트를 위해 적절한 게시물 ID로 대체하세요
puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
대량 업데이트 실행:
의도대로 작동하는지 확인한 후, [URL] 태그를 포함하는 모든 게시물을 처리하도록 스크립트를 실행할 수 있습니다.
모니터링 및 검증:
스크립트 출력을 모니터링하세요. 업데이트된 각 게시물의 id가 콘솔에 출력됩니다. 완료 후, 변경 사항이 올바르게 표시되는지 사이트를 통해 몇몇 게시물을 확인하세요.
백업 알림:
특히 대량 업데이트 작업을 수행할 때, 스크립트를 실행하기 전에 전체 데이터베이스 백업을 확보해 두세요.
추가 질문이 있거나 문제가 발생하면 자유롭게 질문해 주세요!
PostRevisor를 사용한다는 점이 마음에 듭니다. 만약 문제가 발생하면 편집 기록이 남아있을 테니까요.
아아아… 이거 한번 살펴볼게요!!! 정말 감사합니다!!!
반드시 몇 개의 게시물에서 먼저 테스트해 보고 나서 활성화해야 합니다. 또한 이 기능이 얼마나 많은 게시물을 수정할지, 그리고 그 모든 게시물에 대해 누가 알림을 받게 될지도 확인해 보세요. (알림을 건너뛰는 bypass_bump와 유사한 기능이 있는 것 같습니다.)