Amethi
(Jay Van der Zant)
2월 1, 2020, 9:56오전
1
포럼을 Discourse로 이관하면서 남아 있는 깨진 이미지들을 찾아서 교체하려고 하고 있습니다. 지금까지는 큰 성공을 거뒀습니다(remap 명령이 정말 좋습니다!)만, 아래 예시에서는 교체할 대상을 찾지 못하고 있고, 제가 보기에는 아무 문제가 없어 보이는데 혹시 문제점을 아시나요?
예시 콘텐츠:
<img src="https://londonbikers.com/images/transparent.png" alt="PICT0738.JPG" data-orig-src="upload://1yz82u6bbkaAQ7xP06qNTmX9qy3.JPG" width="666" height="500" class="d-lazyload">
그리고
<img src="https://londonbikers.com/images/transparent.png" alt="Rhonda.JPG" data-orig-src="upload://vXQ67D17QssTe5cu6lamJ5XB5Ep.JPG" width="590" height="500" class="d-lazyload">
alt 태그의 내용은 유지하면서 img 요소를 다시 구축해야 하므로 두 단계로 진행해야 합니다. 첫 번째 remap에서 실패하고 있습니다:
즉, 찾을 내용(FIND):
<img src="https://londonbikers.com/images/transparent.png" alt="
그리고 다음으로 교체(REPLACE):
<img src="https://londonbikersarchive.blob.core.windows.net/forum-attachments/
이중 따옴표는 백슬래시로 이스케이프해야 한다고 가정했습니다. 그래서 다음 명령을 사용했습니다:
rake posts:remap["<img src=\"https://londonbikers.com/images/transparent.png\" alt=\"","<img src=\"https://londonbikersarchive.blob.core.windows.net/forum-attachments/"]
하지만 해당 요소가 포함된 게시물이 수천 개나 있음에도 **0 posts remapped!**이라는 메시지가 나옵니다. 혹시 아이디어가 있으신가요?
두 번째 단계에서는 태그의 끝부분을 다음과 같이 remap할 예정입니다:
width="666" height="500" class="d-lazyload">
다음으로:
/>
Amethi
(Jay Van der Zant)
2월 1, 2020, 11:01오전
2
아, 잠깐, 이 이미지 중 일부는 정상적으로 표시되고 있네요. 이건 Discourse의 첨부 파일 기능인가요? 데이터베이스에 HTML 문자열로 저장되어 있는 것이 아니라, 어떤 커스텀 렌더링 로직이 작동하고 있는 건가요?
예를 들어, 이 이미지는 사진을 표시하고 있습니다:
<img src="https://londonbikers.com/uploads/default/original/1X/25b381a9dc03f023a1c5d0af4f2f3132dfbf45c7.jpg" alt="The_rides_0010.jpg" width="640" height="480" class="d-lazyload">
하지만 이 이미지는 표시되지 않습니다. 파일은 클라우드 Blob 스토리지에 가지고 있으므로, Discourse에 가져오거나 아니면 Blob 스토리지에서 참조되도록 하길 원합니다:
<img src="https://londonbikers.com/images/transparent.png" alt="__2.jpg" data-orig-src="upload://411oUp2Yn6wumJCRAiFptkwTF58.jpg" width="662" height="500" class="d-lazyload">
pfaffman
(Jay Pfaffman)
2월 1, 2020, 3:39오후
3
raw에 있는 이미지들이 맞나요?
remap으로 처리하기보다는 rails 콘솔에서 ruby를 사용하는 것이 더 나을 것 같습니다.
Amethi
(Jay Van der Zant)
2월 1, 2020, 4:03오후
4
제이, 그게 뭔지 하나도 이해가 안 됐어요
원시 데이터(raw)라고 하면, 파일 포맷을 말하는 건가요? 아니요, 그냥 일반적인 웹 포맷입니다. 레일즈 콘솔에서 뭘 하시는 건가요?
pfaffman
(Jay Pfaffman)
2월 1, 2020, 6:17오후
5
raw는 에디터에서 보이는 텍스트가 저장되는 필드입니다. 사용자가 대체하려는 부분은 ux에서 게시물을 편집할 때 보이는 내용, 맞나요? (cooked는 처리된 내용으로, 최종적으로 표시되는 부분입니다.)
Amethi:
레일즈 콘솔에서 뭘 하자는 건가요?
게시물을 다시 작성하는 작업을 수행하는 것입니다. 다음 내용은 당신을 위험한 존재로 만들기에 충분할지도 모릅니다:
bps = Post.where("raw like '%//SOME-STRING%'")
bps.each do |post|
post.raw.gsub!(/OLD/,'NEW')
post.save
end
rake 태스크보다 이 방식의 장점은 여러 단계의 이스케이프(escape)를 처리할 필요가 없다는 점입니다.