수입 전에 신뢰 수준, 배지, 기타 Discourse 설정을 미리 설정해 두는 것이 안전할까요? 이 수입기가 단순히 게시글/스레드/프로필을 삽입하거나 교체할 것 같아서요. 코드에서 관련 내용을 바로 확인되지는 않지만, Discourse 설정을 모두 정리해 두었다가 이 수입기로 인해 설정이 초기화되는 것은 원치 않습니다.
가능합니다. 하지만 백업을 꼭 만들어 두세요. 설정을 변경해야 하거나 처음부터 다시 실행해야 할 가능성이 높으므로, 수입된 데이터가 없는 설정 상태의 백업을 유지해 두는 것이 좋습니다.
삽입만 수행합니다. 대부분 아무것도 교체하지 않습니다. 사용자가 이미 존재하는 경우 변경하지 않습니다. 사용자가 설정해 둔 카테고리를 사용하지도 않습니다. 업데이트된 이전 사이트 데이터베이스로 다시 실행하면 새로운 데이터는 추가하지만, 이전 실행 시점에 이미 수입된 항목은 변경하지 않습니다. 덕분에 처리 속도가 훨씬 빨라지지만, 어떤 이유로든 스크립트를 변경해야 한다면 모든 데이터를 삭제하고 처음부터 다시 시작해야 합니다.
두 가지 질문이 있습니다. 첫째, 이 작업을 더 빠르게 실행할 수 있는 방법이 있을까요? 32코어 CPU와 64GB RAM을 갖춘 Linode를 사용하고 있는데도 25만 개의 게시물을 가져오는 데 여전히 4~5시간이 걸립니다.
둘째, 첨부 파일을 게시물 전에 가져오나요, 아니면 후에 가져오나요? 스크립트를 살펴본 결과 후에 가져오는 것 같습니다. 첨부 파일이 가져와지지 않았다는 사실을 알게 될 때까지 4~5시간을 기다려야 한다는 점은 정말 아쉽습니다.
대부분 모든 것이 이전 데이터에 의존합니다. 후처리 과정은 여러 CPU를 활용할 수 있지만, 대부분 작업이 완료된 후에야 시작됩니다. 따라서 더 빠른 단일 CPU를 사용하는 것이 좋습니다.
스크립트를 수정하여 최근 업로드만 가져오도록 할 수 있지만, 대규모 개발을 계획하고 있지 않다면 그냥 5시간을 기다리는 것이 좋습니다.
글쎄, 이미 몇 번이나 시도해 봤는데 첨부 파일이 가져와지지 않고, 아이디어가 다 떨어져가는 상황입니다. 누군가 도와주셨으면 좋겠습니다 (지금까지 조언해 주셔서 감사합니다, @pfaffman).
*.data 파일을 xenforo의 원래 폴더 구조(즉, ‘attachments’ 폴더) 그대로 유지하면서 docker 컨테이너의 /root/attachments 경로에 배치했습니다. 또한 가져오기 스크립트도 /root/attachments로 업데이트했습니다. 명령줄에서 ls 명령을 사용하면 /root/attachments에 파일들이 잘 보이는 것을 확인할 수 있습니다.
스크립트를 실행했는데, 매번(약 4~5시간 대기 후) 첨부 파일이나 사진이 있는 모든 게시글에는 xenforo의 구식 bbcode([ATTACH]123456[/ATTACH])만 표시되고, discourse 설치 환경에서는 사진이나 첨부 파일이 전혀 보이지 않습니다.
무엇을 잘못하고 있는 걸까요? 90%는 해낸 것 같은데, 뭔가 중요한 것을 놓치고 있는 것 같습니다.
코드를 확인해야 합니다. 첨부 코드 자체가 실행되고 있는 건가요? 첨부 파일이 스크립트가 기대하는 형식인가요?
첨부 함수가 게시물 가져오기 이후에 실행되는 경우, 전체를 다시 실행할 필요가 없습니다. 게시물을 건너뛰거나(조금 더 빠르게 하려면 게시물 가져오기를 주석 처리하면 됩니다) 그대로 진행됩니다.
하지만 설정을 올바르게 하지 않은 것부터 현재 사용 중인 zenforo 버전과 호환되지 않는 것까지, 여러 가지 문제가 있을 수 있습니다. 코드를 확인하고 디버깅 출력을 추가하여 어떤 일이 일어나고 있는지 살펴봐야 합니다.
참고로, 이 스레드를 찾는 분들을 위해 말씀드리면, 첨부 파일을 어디에 배치하든 이 스크립트와 함께 작동하지 않았습니다. 제 생각에는 이 스크립트는 개선이 필요하고, 특히 설명서가 어디에 무엇을 어떻게 배치해야 하는지 더 명확하게 이해할 수 있도록 대폭 수정이 필요합니다.
그때까지 이 스크립트는 작동하지 않는다고 보겠습니다.
어떤 버전과 어떤 설정에서 일부 사용자들에게는 작동할 수 있지만, 지금 사용 중인 환경에서는 그렇지 않은 것 같습니다. 각 임포트가 얼마나 다른지 놀라울 정도입니다.
현재 Xenforo 공식 가져오기 스크립트가 깨진 상태인가요?
사용자와 카테고리는 잘 가져오는데, 첨부 파일 폴더가 있는 게시물을 가져올 때 문제가 발생합니다.
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113289 / 146471 ( 77.3%) [3766 items/min] Exception while creating post 162516. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113290 / 146471 ( 77.3%) [3766 items/min] Exception while creating post 162517. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
113290 / 146471 ( 77.3%) [3766 items/min] Exception while creating post 162517. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc
어떤 버전의 Redis를 사용 중이신가요?
기존 Xenforo 커뮤니티를 Discourse로 겨우 이식하는 데 성공했기에, 같은 작업을 시도하는 분들을 위해 제 경험을 공유해 보려 합니다. 참고로 저는 이 분야에 잘 알지 못하므로, 제 추측이 틀린 부분이 있을 수 있습니다. 저는 첨부 파일 약 20% 손실로 Discourse로의 이식을 완료했습니다. 구체적인 이유는 설명하기 어렵지만, 문제점은 제 포럼에서 지난 2~3년치 게시물에만 영향을 미치는 것 같고, 그 이전 게시물들은 약 95% 이상의 성공률을 보였습니다. 제 추측으로는 XF 1.x에서 XF 2.x로의 전환과 관련이 있는 것 같습니다.
이 작업을 시도하려는 분들을 위해, 이 스크립트는 XF 2.x에서 작동하려면 상당한 업데이트가 필요하다는 점을 알아두시기 바랍니다. 구체적으로 375~378번 줄은 Xenforo Media Gallery(XFMG)에서 첨부 파일을 가져오기 위한 올바른 데이터베이스 테이블을 가지고 있지 않습니다. 저는 XFMG를 포럼에서 분리하고 제거하여 이 문제를 우회했습니다. 어차피 저는 XFMG를 포럼의 첨부 파일을 미러링하는 용도로만 사용하고 있었기 때문입니다.
호기심이 있으시다면, 376번 줄은 xengallery_media 테이블을 가리키는데, 이는 명백히 XFMG 1.x에 대한 참조입니다. XFMG 2.x에서는 이 테이블이 xf_mg_media_item으로 변경되었기 때문입니다. 나머지 부분은 매칭을 시키지 못했는데, 첨부 파일의 ID를 게시물과 매칭시키기 위해 추가 코드가 필요할 것으로 의심됩니다.
결국 저는 314번 줄인 s = process_xf_attachments(:gallery, s)를 주석 처리했습니다.
이렇게 하면 스크립트가 누락된 SQL 테이블로 인해 에러가 나지 않도록 할 수 있습니다.
이 작업을 마친 후, 저는 이 스레드에서 @Jack51의 게시글을 따랐습니다:
다만 다음과 같은 수정을 가했습니다:
6단계에서는 mariadb 버전을 업데이트해야 합니다. mariadb-server-10.3을 mariadb-server-10.5로 변경하세요.
7단계는 service mysql start 대신 service mariadb start여야 합니다.
저는 다음을 변경했습니다.
frozen_string_literal: true
다음으로:
frozen_string_literal: false
이 스레드에서 다른 사람이 언급한 것과 동일한 에러가 발생했기 때문입니다.
이 스레드에서는 스크립트가 첨부 파일을 인식하도록 첨부 파일을 어디에 배치해야 하는지에 대해 많은 혼란이 있었던 것 같습니다. 솔직히 저도 이 부분에서 어려움을 겪었습니다. docker에 완전히 초보인 분들을 위해(저처럼), docker가 기본적으로 서버에서 실행되는 가상 머신(즉, 두 개의 다른 OS/파일 시스템을 다루게 됨)이지만, 파일을 전송하기 위한 공유 공간이 있다는 점을 짚어주는 것이 매우 유용할 것입니다:
/var/discourse/shared/standalone/tmp
이 디렉터리는 호스트 머신에 위치하며, 여기에 넣은 파일들은 docker 컨테이너에 진입하면 다음 경로에 나타납니다:
/shared/tmp
따라서 xenforo의 동일한 파일/폴더 구조를 유지하고 있다고 가정하면, 다음 폴더를 복사합니다:
internal_data/attachments
호스트 머신의
/var/discourse/shared/standalone/tmp
경로로 복사하면, docker 컨테이너에 진입한 후 해당 폴더가 /shared/tmp에 나타납니다.
다음으로, xenforo.rb 스크립트를 편집할 때 다음을 변경합니다:
ATTACHMENT_DIR = '/tmp/attachments'
다음으로:
ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'
이렇게 하면 첨부 파일이 올바른 위치에 있게 됩니다. 참고로 xenforo에는 data/attachments 폴더도 있지만, 여기서 찾는 .data 파일 대신 .jpg 파일로 채워져 있습니다. 이전에 이 스레드에서 누군가가 이 실수를 했기 때문에 짚어두는 것이 좋겠다고 생각했습니다.
또한 스크립트에서 권한 에러가 발생했으므로, 디렉터리의 chmod를 수행해야 할 수 있습니다:
sudo chmod a+rw -R /shared/tmp/internal_data/
스크립트가 첨부 파일을 인식하지 못하고 있다는 가장 큰 신호는, 평소에는 가끔 에러를 출력해야 할 텐데 이상하게 조용하다는 점입니다:
따라서 이식이 몇 시간 동안 진행되면서도 에러가 하나도 표시되지 않는다면, 첨부 파일을 인식하지 못하고 있는 것일 가능성이 높습니다.
제가 할 말은 이것입니다. 오해하지 마세요, 이 스크립트가 존재하는 것 자체에 감사드립니다. 80%의 성공률은 아무것도 없는 것보다 낫습니다(2009년 vBulletin에서 Xenforo로 전환할 때 비슷한 성공률을 보였습니다), 그리고 Discourse 플랫폼을 사용해 볼 기대가 큽니다. 이 게시글이 몇 분에게 도움이 되기를 바라며, 언젠가 저보다 더 뛰어난 기술력을 가진 누군가가 이 스크립트를 조금 더 잘 작동하도록 업데이트해 주었으면 좋겠습니다.
현재 버전의 가져오기 스크립트는 첨부 파일이 항상 게시물 BBcode에 내장되어 있지 않기 때문에 많은 첨부 파일을 놓치고 있었습니다. 상당한 개선 사항과 수정 사항을 담은 풀 리퀘스트를 만들었습니다. 이제 스크립트는 모든 첨부 파일을 인식하며, 좋아요, 아바타, DM도 가져오고, 카테고리 및 주제에 대한 영구 링크를 생성합니다.
@gerhard 현재 그 PR이 당신에게 있는 것 같은데, 시간이 나시면 병합해 주시겠어요?
네, 어제 그걸 알아차렸어요.
완전히 잊고 있었네요. 오늘 아니면 다음 주에 검토할게요.
이건 이제 코드에 병합되었나요? 다른 이유로 xenforo로 돌아가야 했지만, 이 스크립트가 작동하면 discourse로 넘어오고 싶습니다.
죄송합니다. 그냥 github을 확인했어야 했는데, 11월 28일에 병합된 것 같습니다.
6개의 게시글이 새로운 주제로 분리되었습니다: AVATAR_DIR 상수가 XenForo 가져오기 스크립트에 지정되지 않음
단순히 후속 소식을 전하고, 구글 등을 통해 이 스레드를 발견한 Xenforo에서 이사를 고려하는 분들에게 Flarum 포럼 소프트웨어용 가져오기(importer)가 현재 테스트 중이라는 점을 알려드리고자 합니다:
흥미롭네요. 하지만 확실한 Xenforo에서 Discourse로의 가져오기 도구가 있다면 더 흥미로울 것 같습니다.
이 분은 자신이 하는 일에 대해 매우 자신감이 있어 보이는데, 그 점을 칭찬합니다!
최근에 Xenforo를 가져왔습니다. 몇 가지 기능을 추가하기 위해 변경 사항을 만들었지만, 그 중 어떤 것이 해당 포럼에 특화된 것이 아닌지 지금은 기억나지 않습니다.

