Migrate a phpBB3 forum to Discourse

최소 한 가지 말해 둘 수 있는 것은, 이 문제가 단순히 오래된 게시물이 새로운 게시물로 링크되는 경우에 한정되어 발생하지는 않는다는 점입니다.

문제를 처음 발견했을 때의 예시를 하나 소개하겠습니다.

원본 게시물 ID: 842948은 이미 존재하던 스레드의 22번째 페이지로 링크되고 있습니다. 여기서 시작 게시물(&start=220)의 ID(842880)는 링크를 건 게시물(842948)보다 작습니다.

수입(import)이 완료된 후, 이 원본 게시물(덤프 생성 불과 며칠 전에 게시된 것이었습니다)은 7년 전의 스레드로 링크가 바뀌어 있었고, 해당 스레드의 첫 번째 게시물 원본 ID는 1353이었습니다.

왜 이런 일이 발생하는지, 숫자 사이에 어떤 유사성이 있는지 등 어떤 단서도 찾을 수 없습니다. 원래 링크는 phpBB에 의해 자동 링크 처리된 일반 URL이었습니다. 일반적으로 이러한 링크는 다른 여러 곳에서 문제가 없이 정상 작동합니다.

일반적으로 수입 과정이 처음부터 순조롭게 진행되리라고 기대하지는 않습니다. 지금까지의 진행 상황에는 매우 만족하고 있지만, 이 문제는 특히 아직 Discourse의 개발/디버그 환경을 설정하는 방법에 대해 전혀 감이 잡히지 않기 때문에, 수정하기가 가장 어려운 문제 중 하나가 될 것 같습니다. 곧 이 부분을 깊이 파고들어야 할 것 같습니다.

3개의 좋아요

안녕하세요,
기억이 맞다면, phpbb 가져오기(importer)는 기본적으로 사용자 이메일 주소에서 추측하여 Discourse 사용자 전체 이름을 채워 넣었습니다. 제 추측이 맞는지, 그리고 지금도 그런지 궁금합니다. 가져오기 파일에서 이 부분에 대한 내용을 찾을 수 없거든요…

다음에 가져올 포럼에서는 이런 일이 일어나지 않기를 바랍니다.

또 다른 질문이 있습니다.

현재 phpbb 포럼에는 사용자 정의 필드(예: 사용자의 facebook 또는 instagram URL)가 있습니다. 이 데이터를 Discourse 사용자 정의 필드로 가져오고 싶습니다. 아마도 먼저 Discourse를 설치하고 설정하면서 해당 사용자 정의 필드를 추가한 다음, 사용자 정의 가져오기 스크립트로 phpbb 데이터를 가져오는 방식으로 진행해야 할 것 같습니다.

1개의 좋아요

더 이상 그렇게 작동하지 않습니다.

좋은 계획입니다.

6개의 좋아요

phpbb에서 Discourse로 마이그레이션한 후, Discourse가 사용자에게 보낼 월간 이메일 양을 추정할 수 있는 신뢰할 만한 방법이 있을까요? 신규 사용자 등록, 멘션 및 답변, 주간 다이제스트 등이 포함됩니다. phpbb는 기본적으로 매우 적은 양의 이메일을 보내므로, 현재 이메일 제공업체를 변경해야 할 것 같습니다.
현재 실제 phpbb에 대한 통계 자료가 많이 없습니다. 2013년부터 운영되고 있으며, 메시지 수는 200,000개, 회원 수는 5,500명입니다. 매일 새로운 회원들이 등록하고 있습니다.

1개의 좋아요

하루에 몇 개의 게시물을 올리나요?

1개의 좋아요

아직 잘 모르겠어요. 현재 공개된 통계만 가지고 있어요. 대략 20개 정도일 것 같아요.

1개의 좋아요

하루에 게시글이 20개밖에 없다면, 월 최대 3,000통의 이메일이 발송될 것으로 보이며, 이는 Mailgun의 무료 플랜 한도 내에 충분히 들어갑니다.

다만, 많은 사용자를 이관하는 중이므로, 최근 1~2개월 동안 포럼에 접속하지 않은 모든 사용자에게 다이제스트 이메일을 비활성화하는 것을 권장합니다. (원하는 경우 본인이 직접 다시 활성화할 수 있습니다.) Rails 콘솔에서 쿼리를 실행하여 이를 처리할 수 있지만, 제가 직접 수행한 것이 1년 전이라 정확한 코드를 기억하지 못해 죄송합니다.

개인적으로는 이것이 가져오기(import) 스크립트가 처리해 주는 것이 적절하다고 생각합니다. 이상적으로는 마지막 방문 이후 경과 시간 설정을 통해 다이제스트 이메일을 활성화하도록 하는 것이 좋습니다.

4개의 좋아요

동의하지 않습니다. 이것은 가져오기 스크립트가 처리해야 할 사항이 아닙니다. 대신 이를 위한 사이트 설정이 있습니다: suppress digest email after days

4개의 좋아요

그렇네요 :slight_smile: 현재 포럼에서 처음 phpbb를 가져온 후, 기본 값을 줄여야 했습니다. 다이제스트 이메일이 너무 많이 발송되어 이메일 제공업체가 해당 주소를 자동으로 차단했기 때문입니다. 스팸으로 분류되었습니다.

1개의 좋아요

이것은 정확히 같은 개념은 아닙니다. 제 생각에는, 사용자가 가입할 때 다이제스트 이메일을 신청한 경우 마지막 방문 이후 X개월 동안 다이제스트 이메일을 보내는 것과, 이전 포럼에 가입했다는 이유만으로 다이제스트 이메일을 신청한 적 없는 사용자에게 다이제스트 이메일을 보내는 것 사이에는 차이가 있습니다. 사용자가 포럼에 방문하지 않는다고 해서 다이제스트 이메일을 읽지 않는다는 뜻은 아니기 때문입니다. 게다가 이는 일부 관할권에서는 불법일 수도 있습니다! 이주된 모든 사용자의 다이제스트 기능을 단순히 꺼두면, 그들이 스스로 다시 켤 수 있습니다. 아니면 제가 했던 것처럼, 지난 한 달 내에 방문하여 곧 포럼을 이주한다는 공지를 확인했을 가능성이 있는 사용자를 제외하고 모든 사용자의 다이제스트 기능을 끄는 방법도 있습니다. 저는 이것이 공정한 절충안이라고 생각합니다.

실용적인 측면도 있습니다. 저희 phpBB 포럼은 지난 1년 동안 수천 개의 스팸머 계정이 생성되었는데, 이들에게 한 달에 4번 다이제스트 이메일을 보냈다면 무료 Mailgun 한도를 모두 소진한 뒤 상당한 비용을 발생시켰을 것입니다. “N일 후 비활성 사용자 정리” 설정을 조정하자 결국 그 계정들이 정리되었습니다.

5개의 좋아요

여기가 맞는지, 아니면 별도의 주제를 여는 게 맞는지 잘 모르겠습니다. 하지만 phpbb 3에서 이식하는 것에 관한 내용이므로 여기에서 질문드립니다.

저는 1개의 데이터베이스를 사용하여 discourse로 성공적으로 이식했습니다. 하지만 저는 3개의 서로 다른 독립적인 커뮤니티(3가지 다른 언어, 3개의 다른 phpbb 설치 환경)를 보유하고 있으며, 이상적으로는 이 모든 것을 하나의 큰 discourse 포럼으로 통합하고 싶습니다.

질문은 이렇습니다: 어떻게 해야 할까요? 가져오기 스크립트 / phpbb 3 데이터베이스 / 다른 어디에서 변경해야 하나요?
두 포럼 모두에 계정이 있는 사용자가 몇 명 있습니다(아마도 3개 포럼 모두에 계정이 있는 사용자도 있을 수 있습니다). 하지만 단일 로그인(SSO)이 없으므로 각 포럼마다 동일한 사용자 이름으로 서로 다른 계정을 가지고 있습니다. 모두 다른 설치 환경이고 다른 데이터베이스입니다.

이것이 실현 가능하면 정말 좋겠습니다!

도움을 주시면 감사하겠습니다!

1개의 좋아요

그냥 그대로 사용해서는 작동하지 않습니다. 이는 가져오기(import) 스크립트가 원래 ID를 Discourse 데이터베이스에 저장하기 때문이며, 동일한 ID를 가진 레코드를 발견하면 추가 포럼에서 데이터를 가져오지 않기 때문입니다. 하지만 이 문제를 해결할 수 있는 두 가지 방법을 생각해 볼 수 있습니다:

  1. 어려운 방법: 가져오기 스크립트의 여러 부분을 수정하여, 게시물, 주제, 카테고리 및 사용자에게 저장되는 import_id 커스텀 필드에 각 포럼마다 접두사를 추가해야 합니다.

  2. 쉬운 방법이지만, 증분 가져오기(incremental imports) 기능을 잃게 됩니다: 각 가져오기 작업 후 커스텀 필드를 삭제합니다.

    TopicCustomField.where(name: 'import_id').delete_all
    PostCustomField.where(name: 'import_id').delete_all
    CategoryCustomField.where(name: 'import_id').delete_all
    UserCustomField.where(name: 'import_id').delete_all
    

해결 방법 2는 테스트되지 않았지만, 이론적으로는 작동해야 합니다. 시도하기 전에 백업을 생성해 두세요.

7개의 좋아요

새해 전 첫 테스트 이후 이제 마이그레이션 프로젝트를 다시 진행하려고 합니다. 여전히 가장 큰 문제 중 하나는 실패하는 링크 재작성(link rewriting)이며, 이를 가장 잘 처리하는 방법에 대해 고민하고 있습니다.

@gerhard 제 코딩 지식은 매우 기초 수준이며, rails 전반에 대한 지식은 전혀 없고 discourse 구조에 대한 상세 지식도 부족합니다 - 따라서 다음 질문에 대해 양해 부탁드립니다: 가져오기(importer)가 링크에서 주어진 ID에 해당하는 가져온 게시글을 찾지 못하는 경우를 처리할 수 있는 가능성이 있을까요? 그리고 잘못된 링크로 대체하는 대신, 사용자에게/관리자에게 이를 알리고 가져오기 후 이러한 문제 있는 링크들을 쉽게 찾을 수 있도록 하는 텍스트를 추가하는 방법은 어떨까요?

현재 작동 방식에 대한 제 주요 우려는, 이러한 링크들이 성공적으로 대체된 것처럼 보일 뿐 가져오기 후 이를 찾아서 수동으로 수정할 방법이 없다는 점입니다.

도와주실 수 있다면 정말 감사하겠습니다.

1개의 좋아요

한 가지 방법은 모든 게시물이 가져와진 후에야 해당 링크를 대체하도록 스크립트를 다시 작성하는 것입니다. 도움이 필요하고 예산이 있으시다면 저에게 연락하시거나 Marketplace 채널에 게시물을 올려주세요.

4개의 좋아요

불행히도 이 프로젝트는 예산이 작아서 그 문제에 돈을 쓰는 것이 중요하지 않다고 생각됩니다. 하지만 그런 작업이 가능하다는 점은 확실히 알아두면 좋겠습니다.

또 다른 질문이 있습니다. 가져오기 과정에서 BBCode가 다르게 처리되는 것 같다는 점을 발견했습니다. 예를 들어 [size] 태그는 그대로 텍스트로 남는 반면, [color] 태그는 완전히 제거되는 것 같습니다. 색상 기능을 재사용하려고 했지만 관련 Discourse 플러그인이 있는 것을 확인했습니다. 하지만 가져오기 과정에서 태그가 제거되는 것 같습니다. 첫 번째 게시물에는 BBCode를 가져올 수 있다고 되어 있었지만, 어떤 태그가 가져와지고 어떤 태그가 가져와지지 않는지를 제어하는 설정을 찾을 수 없었습니다.

가능하다면 size 태그를 제거하고 color 태그는 그대로 두는 방식을 선호합니다. 이 처리 방식에 대해 제가 놓치고 있는 부분이 있는지, 그리고 어떻게 변경할 수 있는지 알려주시면 감사하겠습니다.

1개의 좋아요

제 phpbb 포럼에서 삭제된 주제들이 사라진 줄 알았는데, 어떻게 discourse로 이전되어 있는 것을 방금 발견했습니다.

이것이 어떻게 가능한가요?

1개의 좋아요

이 작업을 하려고 하는데 설명이 너무 어려워 막막합니다. 여기서 말하는 설정 파일은 어떤 것인가요? 그리고 언제 해야 하나요? 가져오기 전에 해야 하나요, 후에 해야 하나요?
미리 감사합니다!

수정: 아, 관리자 CP의 이모지 설정 파일을 말씀하시는 거군요? 텍스트 파일을 가져오는 방식으로 이 작업을 수행할 수 있는 방법이 있을까요? 커스텀 이모티콘이 약 100개 정도 있어서, 해당 매핑을 Discourse로 복사할 수 있는 방법이 있는지 궁금합니다. (혹시 smily.pak phpbb 파일을 Discourse 설정으로 복사할 수 있다면요?)

1개의 좋아요

수입기 설정 파일을 확인하셨죠? :wink:

3개의 좋아요

phpBB가 정리된 주제와 일반 삭제된 주제를 다르게 처리하는 것 같습니다. 현재는 이 기능이 지원되지 않습니다. phpBB가 정리된 주제를 어떻게 삭제된 것으로 표시하는지 확인하고 가져오기(import) 스크립트를 수정해야 합니다.

3개의 좋아요

아, 그렇죠! 물론이죠! 처음 변환 작업을 한 지 너무 오래되어서 그걸 완전히 잊고 있었어요. 감사합니다!

삭제된 주제(pruned topics)에 대해서는, 네, 그런 것 같다고 생각했어요. 제 포럼에는 큰 문제가 되진 않지만, 좀 의외였고, 다른 사람들에게 이런 일이 발생할 수 있다는 점을 미리 알려주는 것도 좋을 것 같아요.

1개의 좋아요