FluxBB에서 링크를 유지하며 마이그레이션

여러분 안녕하세요,

기존 커뮤니티(macscripter.net - Mac OS 자동화 토론)를 FluxBB에서 Discourse로 이전하는 작업을 계획하고 있습니다. 데이터 이전 측면에서 이 글이 유망해 보입니다. 30,000명 이상의 사용자와 120,000개 이상의 게시물이 있어 큰 작업이 될 것 같지만, 불가능하지는 않아 보입니다.

다만, 모든 유입 링크를 보존하고 싶습니다. macscripter.net은 Apple 자동화 커뮤니티에서 중요한 참고 자료입니다. 거의 20년치 게시물이 있으며, 다른 사이트나 메일링 리스트 아카이브에서 이 사이트를 참조하는 링크가 많이 있습니다. 이러한 링크가 깨지는 것을 원하지 않습니다.

FluxBB 게시물의 유입 링크를 해당 Discourse 게시물로 변환하는 방법을 찾고 있습니다. 기본 Discourse에서는 이를 수행할 방법을 찾지 못했으므로, FluxBB의 /viewtopic.php?id=##### 링크에 응답하여 적절한 Discourse 링크로 리디렉션하는某种 플러그인을 만들어야 할 것 같습니다. 이 유형의 문제를 해결해 본 경험이 있는 분이 계신다면, 어떻게 접근했는지 듣고 싶습니다.

제안해 주시면 감사하겠습니다.

감사합니다.
-Mark

대부분의 가져오기 스크립트는 리다이렉트를 처리하는 영구 링크(permalinks)를 생성합니다. 해당 스크립트가 그렇게 하는지는 바로 알 수 없습니다. 그렇지 않다면, 예제 코드를 확인하기 위해 다른 스크립트를 참고할 수 있습니다.

저도 같은 질문을 가지고 있고, 답변에 대해 조금 혼란스럽습니다. 저도 상당한 규모의 FluxBB 가져오기를 진행하려고 합니다.

실제로 Discourse에 "Permalinks"라는 기능이 있다는 것을 확인했습니다( https://meta.discourse.org/t/how-to-make-a-redirec t-url-in-a-discourse-install/40973/4 ). 따라서 이러한 것을 생성하면 Discourse가 "/viewtopic.php?id=((old topic id))"과 같은 FluxBB 스타일의 URL을 "/t/((new topic slug))/((new topic id))"로 리디렉션할 수 있다는 뜻이죠. 주제 내 개별 게시물에 대해서도 마찬가지일까요? 사용자 프로필 URL에 대해서도 마찬가지일까요. (즉, 수많은 Permalinks가 필요할 것입니다.) Permalinks를 위한 데이터베이스 테이블도 확인했습니다.

좋은 해결책처럼 들리지만, FluxBB 가져오기 도구가 Permalinks를 생성하지 않습니다. 그 관련 코드를 찾을 수 없습니다. 사실 import_scripts 중 어떤 코드에서도 이를 수행하는 코드를 찾을 수 없습니다( “Permalink” ActiveRecord 모델에 대한 언급이 전혀 없습니다).

FluxBB 가져오기 도구를 수정하여 이를 수행하는 작업을 진행할 의향이 있지만, 다른 가져오기 도구 중 예시가 있을까요?

이와 관련하여 코드에서 확인할 수 있는 유일한 것은 "LookupContainer"가 초기화되어 모든 구 ID와 해당 새 ID를 저장한다는 점입니다. 이를 사용하여 많은 수의 Permalink 객체를 생성할 수 있을까요?

맞습니다.

vbulletin 가져오기 도구를 확인해 보세요(또는 answerhub, vanilla, mylittleforum, bbpress, drupal 등 다른 도구들도 참고해 보세요. 대소문자를 구분하여 grep을 수행했거나 다른 문제가 있을 수 있습니다). 이 도구는 import_topics 함수에서 이를 처리합니다(permalink 파일 함수는 무시하세요). 영구 링크를 추가하고, fluxbb URL을 생성한 영구 링크로 매핑하는 permalink_normalization 코드가 필요합니다.

아, 맞네. 내 IDE 검색이 나를 속이고 있었어. 사실 “Permalink” 객체가 생성되는 예제가 꽤 많아. 그러면 FluxBB 가져오기에 이 기능을 추가하는 걸 한번 검토해볼까.

@alldritt, 네가 진행한 대규모 가져오기는 어떻게 됐어? macscripter.net이 아직 FluxBB를 쓰고 있는 걸 보면, 잘 안 된 건가? :slight_smile: fluxbb 가져오기 도구가 bbcode를 제대로 변환하지 못하는 걸 알아챘다면, 그 부분을 수정하기 위해 여러 가지 패치를 작업 중이야: 진행 중인 Pull request.

이 두 가지 토론 사이에 흥미롭고(어색한) 겹치는 부분이 있어. FluxBB는 [post=123] 형태의 bbcode를 지원해서 ID로 다른 게시물을 링크할 수 있거든(원본 FluxBB 시스템의 오래된 게시물 ID를 참조하는 경우). 만약 이러한 ID를 리다이렉트하는 해결책이 있다면, 이 문제를 처리하기가 훨씬 쉬워질 거야.

그렇지 않습니다. 영구 링크(Permalinks)는 수신 링크에만 작동하며 내부 링크에는 작동하지 않습니다. Discourse 인용문으로 해당 내부 링크를 다시 작성하도록 코드를 작성해야 합니다. 이에 대한 예시도 있습니다.

이 주제를 다시 살려주셔서 감사합니다!

전환 작업을 몇 번 시도해 보았지만 결국 포기했습니다. 나중에 M1 Mac으로 넘어가면서 Discourse 테스트 환경을 잃어버렸고, 다시 재구성할 여유가 없었습니다. 시간이 나면 이 프로젝트에 다시 돌아가고 싶습니다. 기존 링크의 리디렉션 처리는 제가 고생했던 부분 중 하나였습니다. 모든 BBCode가 올바르게 변환되었는지 확인하는 작업까지 아직 못 해봤습니다. 변환해야 할 게시물이 13만 개가 넘어서 확인 작업이 만만치 않습니다.

이 내용이 도움이 되길 바랍니다. 어제 저는 FluxBB 가져오기(Importer)에 create_permlinks 기능을 추가하는 작업을 하고 있었습니다.

현재 이 작업은 제 WIP PR에 올라가 있습니다. “Add Permalink creation logic to FluxBB importer” 커밋을 이 목록의 끝에서 확인하실 수 있습니다. 언젠가 이 모든 것을 병합(Merge)하길 희망하며, 순서가 달라질 수도 있습니다(현재는 시작점으로 이 기본적인 PR에 대한 누군가의 리뷰를 기다리고 있습니다).

따라서 이 작업은 FluxBB URL의 네 가지 서로 다른 유형에 대한 리다이렉트를 생성합니다.

  • profile.php?id=<user id>
  • viewtopic.php?pid=<post id>
  • viewtopic.php?id=<topid id>
  • viewforum.php?id=<forum id>

이 네 가지 유형이 사람들이 작동하는 링크를 유지하고자 할 때 필요한 모든 것을 포괄한다고 생각합니다. 어떻게 생각하시나요?


FluxBB의 특수 내부 링크라는 주제로 다시 돌아가서,

저는 이 링크들을 새로운 Discourse 내에서 내부 링크로 유지하려 하지 않았습니다. 게으른 해결책은 다음과 같습니다: 이 링크들은 구 FluxBB 포럼 URL(외부 링크로서 전체 URL)로 연결되도록 합니다. 그리고 이 Permalinks 덕분에 사용자는 새로운 Discourse의 정확한 위치로 리다이렉트됩니다.

귀찮은 해결책이 효과가 있을 수도 있어요. 원하시면 내부 링크를 재작성하는 예시를 찾아볼 수 있지만, 게으른 방식도 좋은 경우가 있습니다.