기존 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 플랫폼을 사용해 볼 기대가 큽니다. 이 게시글이 몇 분에게 도움이 되기를 바라며, 언젠가 저보다 더 뛰어난 기술력을 가진 누군가가 이 스크립트를 조금 더 잘 작동하도록 업데이트해 주었으면 좋겠습니다.
