XenForo에서 첨부 파일을 가져오는 중 발생하는 문제

안녕하세요,

1,500명의 회원과 약 75,000개의 게시글이 있는 Xenforo 데이터베이스를 Discourse가 설치된 새 서버로 성공적으로 마이그레이션했습니다.

첨부 파일 관련해서 한 가지 질문이 있습니다. 스크립트를 보면 첨부 파일 폴더가 존재하면 스크립트가 가져오기(import)를 수행하는 것 같습니다. 그렇다면 기존 서버의 첨부 파일을 어디에 배치해야 할까요?

a) 서버의 Docker 부분 어딘가
b) 원래 위치인 /var/discourse/shared/standalone/tmp/attachments

?

경로를 아는 분 계신가요???

가져오기를 수행하는 머신에서 접근할 수 있는 원하는 위치에 파일을 배치하고, 해당 경로를 여기에 입력하세요:

  ATTACHMENT_DIR = '/tmp/attachments'

Docker 컨테이너 내부에서 실행 중이고 파일을 var/discourse/shared/standalone/tmp/attachments 아래에 배치했다면, 경로에는 /shared/tmp/attachments를 사용해야 합니다. 컨테이너 내부에서 파일을 확인하여 이를 검증할 수 있습니다.

네, 제이. 정보를 제공해 주셔서 감사합니다. 이번에는 첨부 파일 폴더 설정을 포함하여 클린 인스톨을 진행할 예정입니다. 첨부 파일은 /shared/tmp/attachments에 배치한 후 결과를 가지고 다시 찾아오겠습니다.

한 가지 빠른 질문이 있는데… 계정 비밀번호도 가져올 수 있는 방법이 있을까요?

누군가 문제가 어디 있는지 봐줄 수 있을까요?

root@my-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
기존 그룹 로딩 중...
기존 사용자 로딩 중...
기존 카테고리 로딩 중...
기존 게시글 로딩 중...
기존 주제 로딩 중...

사용자 생성 중
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 100명의 사용자를 건너뜀
이미 가져온 4명의 사용자를 건너뜀

카테고리 가져오는 중...
       23 / 23 (100.0%)  [326682 items/min]
주제 및 게시글 생성 중
       74 / 74752 (  0.1%)  [99817 items/min]  Traceback (most recent call last):
        18: from script/import_scripts/xenforo.rb:396:in `<main>'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squush!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': can't modify frozen String (FrozenError)
root@my-app:/var/www/discourse#

이번에는 첨부 파일을 var/discourse/shared/standalone/tmp/attachments에 두었습니다.

찾았습니다… 문제는 가져오기용 첨부 파일이 포함된 폴더가 Docker 앱 내의 /var/www/discourse/…/tmp/attachments 경로 안에 반드시 있어야 한다는 것입니다.

이제 괜찮습니다. 스크립트가 실행 중이며 약 1.5시간 후에 완료될 것입니다.

수정: 다시 첨부 파일 가져오기가 작동하지 않는 것 같습니다… 현재 가져오기의 78%에 도달했으며, 이미지나 첨부 파일이 있었던 모든 게시물에 [ATTACH]9788[/ATTACH]와 같은 태그와 그 사이의 숫자가 남아 있습니다. 그리고 업로드된 다음 첨부 파일은 [ATTACH]9789[/ATTACH]가 됩니다…

이 문제에 대한 도움이 필요하면 기꺼이 받겠습니다 :confused:

attachment_dir를 올바르게 설정하기 전에 게시물을 가져온 경우, 모든 게시물을 삭제하고 가져오기를 다시 시작해야 합니다.

불행히도 현재 가져오기가 진행 중인데, 로그에 첨부 파일에 대한 정보를 찾을 수 없습니다?

가져오기 스크립트를 실행했을 때 첨부 파일 디렉토리가 존재하지 않았기 때문에 첨부 파일이 건너뛰어졌습니다.

그렇게 하지 않았습니다… 첨부 파일이 있는 상태에서 새로 가져오기를 실행했습니다.

제가 여기서 도움을 드리기 어렵습니다. 예산이 있으시다면 Redirecting… 를 참고해 주세요.

마지막으로 드리는 조언입니다. 첨부 파일이 스크립트가 찾을 수 있는 위치에 있지 않다고 확신합니다. 모든 것을 삭제하고 처음부터 다시 시작해야 할 것입니다.

스크립트를 다시 실행하기 전에, 해당 폴더 안에서 다음을 입력하세요.

 ls /tmp/attachments

여기서 /tmp/attachments는 다음 줄에 넣은 경로입니다.

  ATTACHMENT_DIR = '/tmp/attachments'

첨부 파일 목록이 표시되지 않으면, 첨부 파일이 어디에 있는지 계속 찾아보셔야 합니다.

네, Xenforo의 첨부 파일을 새 서버의 어디에 두어야 스크립트가 이를 찾을 수 있는지 정확히 알려 주실 수 있나요? 그렇게 하면 스크립트가 파일을 찾게 될 것을 확실히 알 수 있을 것 같습니다.

누구 없나요?

지금 새로 가져오기를 하고 있습니다(5번째 시도)… 지쳤어요… :roll_eyes:

Xenforo의 첨부 파일을 특정 순서대로 정렬해야 하나요, 아니면 단순히 구조와 /tmp/attachments만 복사/붙여넣기하면 되는 건가요?

현재 스냅샷을 이용해 새 VM에 설치를 진행 중이라, 세부 사항을 빠르게 변경하고 마이그레이션을 다시 시작할 수 있습니다.

어제 Xenforo의 첨부 파일 폴더를 가져왔습니다. 이 폴더의 구조는 'attachements’라는 이름의 메인 폴더 안에 0부터 9까지의 이름으로 된 9개의 하위 폴더가 있고, 각 하위 폴더에는 약 600~700개의 첨부 파일(.jpg)이 들어 있습니다. 해당 폴더를 var/discourse/shared/standalone/tmp/attachments에 배치하고 xenforo.rb 스크립트를 수정하여 다음과 같이 설정했습니다.

ATTACHMENT_DIR = '/shared/tmp/attachments'

ls /tmp/attachments 명령으로 테스트했을 때 구조가 올바르게 확인되었지만, 처음과 동일한 오류가 발생했습니다:

creating topics and posts
74 / 74752 ( 0.1%) [99817 items/min] Traceback (most recent call last):
18: from script/import_scripts/xenforo.rb:396:in <main>' 17: from /var/www/discourse/script/import_scripts/base.rb:47:in perform’
16: from script/import_scripts/xenforo.rb:32:in execute' 15: from script/import_scripts/xenforo.rb:174:in import_posts’
14: from /var/www/discourse/script/import_scripts/base.rb:869:in batches' 13: from /var/www/discourse/script/import_scripts/base.rb:869:in loop’
12: from /var/www/discourse/script/import_scripts/base.rb:870:in block in batches' 11: from script/import_scripts/xenforo.rb:180:in block in import_posts’
10: from /var/www/discourse/script/import_scripts/base.rb:490:in create_posts' 9: from /var/www/discourse/script/import_scripts/base.rb:490:in each’
8: from /var/www/discourse/script/import_scripts/base.rb:491:in block in create_posts' 7: from script/import_scripts/xenforo.rb:186:in block (2 levels) in import_posts’
6: from script/import_scripts/xenforo.rb:315:in process_xenforo_post' 5: from script/import_scripts/xenforo.rb:324:in process_xf_attachments’
4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each' 3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each_key’
2: from script/import_scripts/xenforo.rb:326:in block in process_xf_attachments' 1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in squish!’
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in gsub!': can't modify frozen String (FrozenError) root@my-app:/var/www/discourse#Preformatted text`

2019-11-15T23:00:00Z

다음 위치에 있는 gsub! 문자열에서 **!**를 제거했습니다:

/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb

이제 가져오기 스크립트가 중단되지 않고 계속 실행되며 첨부 파일에 대한 다음과 같은 정보를 표시합니다:

어쨌든 예를 들어 마지막 문자열은 다음과 같습니다:

Could not find file /shared/tmp/attachments//2/2485-c3da9f6ee1e33d3ebf418c5dea1f9e8a.data. Skipping attachment id 2485

…해당 경로에 파일은 존재하지만 .data 확장자가 없습니다. 대신 데이터에는 .JPG가 있습니다.

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

2019-11-15T23:00:00Z

스크립트에 버그가 있었는데, 이를 발견하고 수정했습니다. 이제 첨부 파일을 성공적으로 가져올 수 있습니다.