서식 문제를 어떻게 수정하나요? - 마크다운이 HTML로 엉망으로 변환됨

flarum.amybo.org에서 discourse forum.amybo.org로 마이그레이션을 완료했지만, 이제 포럼에 서식 문제가 가득합니다. 예를 들어:

@"Gerrit"#p174 물 기반 액체(라베이의 것과 비슷하게)라는 아이디어를 좋아해서 [Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml) 성분을 확인해 보았습니다:
1. 정제수, 
2. 붕산나트륨, 
3. 방부제(구연산), 

위 내용이 다음과 같이 변환됩니다:

<r><p><POSTMENTION discussionid="25" displayname="Gerrit" id="174" number="8">@"Gerrit"#p174</POSTMENTION> 물 기반 액체(라베이의 것과 비슷하게)라는 아이디어를 좋아해서 <URL url="https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml"><s>[</s>Nutrisorb Trace Minerals<e>](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml)</e></URL> 성분을 확인해 보았습니다:</p>
<LIST type="decimal"><LI><s>1. </s>정제수, </LI>
<LI><s>2. </s>붕산나트륨, </LI>
<LI><s>3. </s>방부제(구연산), </LI>

이 문제를 해결하는 권장 방법이 있을까요?

각 게시글이 수정된 것으로 표시되지 않도록 전체 포럼에 걸쳐 자동화될 수 있다면 정말 좋겠지만, 그렇지 않다면 HTML 태그를 하나하나 수동으로 제거하여 마크다운으로 되돌리는 것보다는 게시글별로 적용할 수 있는 반자동 수정 방식이 더 나을 것입니다.

그 문제를 수정할 시기는 가져오기를 수행했을 때였습니다. 마이그레이션을 자주 수행하는 입장에서, 이렇게 형식이 엉망인 상태로 포럼을 런칭하는 것은 제가 가장 우려하는 부분 중 하나입니다. 가져오기 스크립트를 수정하는 것은 비교적 쉬웠을 텐데, 런칭 이후에 사후적으로 수정하는 것은 훨씬 어렵습니다. 그때는 1~2시간 정도면 해결되었을 일이, 지금은 그 2~5배의 작업량이 필요합니다.

네, 라이브 포럼의 내용을 정리하는 스크립트를 작성할 수 있습니다. 이때 (위험하지만) 편집 내역을 유지하지 않거나(즉, 편집 기록도 알림도 남지 않음), 편집은 수행하되 배기/알림을 하지 않도록 설정할 수 있습니다. 이전에 제가 이런 일을 해본 적이 꽤 있습니다. 다음과 같은 방식으로 처리할 수 있습니다:

fixes = Post.where("raw like '%something broken%'")
fixes.each do |p|
   new_raw = p.raw.gsub!(some stuff)
   PostRevisor.new(p).revise!(script_user, {raw: new_raw, edit_reason: 'post fixer!'}, {bypass_bump: true)
end

raw 필드에 그 모든 HTML이 포함되어 있나요?

posts:remap rake 명령을 사용할 수 있다고 생각합니다(해당 명령으로 이를 달성할 수 있습니다: Replace a string in all posts). 해당 명령으로 편집이 이루어져서는 안 됩니다.

그 레이크 태스크는 단순한 치환에는 괜찮지만, 금방 다루기 힘들어집니다.

무슨 뜻이죠? 복잡한 정규 표현식을 관리해야 하는 경우, 그게 비현실적이라는 말씀이신가요?

맞아요. 셸에서 태스크를 호출하고 있으므로, Bash, Ruby, 아니면 정규식 중 어떤 것을 이스케이프해야 하는지 빠르게 파악하기가 어렵거나 불가능해집니다. 또한, 수정 사항이 단순한 치환으로 해결되지 않을 것으로 보입니다.

디스코urs에 새로 온 사람인데, 이제 원본(raw)에 접근하는 방법을 찾았습니다. 그리고 네, 모든 HTML이 포함되어 있네요:
https://forum.amybo.org/raw/56/9

기존의 flarum_import.rb 스크립트를 사용하셨나요? Flarum의 p.content 필드(즉, 가져오기 스크립트의 raw에 들어가는 값)에 HTML이 들어 있다는 것은 상상하기 어렵습니다. Flarum은 마크다운을 사용한다고 확신하기 때문에 raw에 HTML이 있는 이유를 모르겠습니다. 아니면 스크립트가 그 정도로 깨져 있는 걸 수도 있겠네요.

하지만 취소선(strikethrough)은 HTML에 있는 것입니다. 아마 CSS로 간단히 수정할 수 있을 것입니다.

<POSTMENTION> 수정은 Discourse에는 인용(quotes)은 있지만 멘션(mentions)은 없기 때문에 조금 더 까다롭습니다. 쉬운 해결책은 그것들을 단순히 @${displayname}으로 바꾸는 것입니다(가져오기 전과 사용자 이름이 같기를 바라며, 또는 user_custom_fields에서 업데이트된 사용자 이름을 조회하십시오). 또 다른 방법은 @mention said [here](/t/-/<discourse ID for topic 25>/<8>)와 같은 링크를 포함하는 것입니다.

미친 해결책은 Flarum 데이터베이스에서 마크다운을 가져와서 raw 필드를 업데이트하는 스크립트를 작성하는 것입니다. 여전히 약간의 정리가 필요하지만(멘션과 POSTMENTION의 경우), 많은 문제를 해결할 것입니다.

또 다른 아이디어는 사이트를 동결하고, 가져온 모든 데이터를 대량 삭제한 후, 가져오기 스크립트를 수정하고 다시 실행하는 것입니다.

하지만 이전으로 옮긴 이후로 새로운 게시물이 많지 않으므로, 그것들을 어떻게든 저장해 두었다가 빈 데이터베이스에서 새로 가져오기를 수행한 후 다시 추가하는 것도 방법입니다. 새 사용자를 처리하는 것은 조금 더 어려울 것입니다.

예산이 있다면 저에게 연락하거나 #marketplace에 게시물을 올릴 수 있습니다.

제이, 감사합니다. 마이그레이션을 제가 직접 진행하지 않아서 어떤 스크립트가 사용되었는지 정확히 알지 못합니다. 해당 작업을 수행한 멤버는 독감으로 쉬고 있지만, 복귀하시면 여기에서 주신 훌륭한 조언을 전달해 드리겠습니다.