게시글은 겨우 5천 개, 회원은 약 1천 명 정도입니다
저는 18m 포럼 게시물을 시도하고 테스트하기 위해 big board importers를 여전히 기다리고 있습니다.
Xenforo를 위한 건가요? 다른 대량 가져오기 기능은 있지만, 1800만 개의 게시글에 대해서는 정말로 매우 느릴 수 있습니다!
우리는 2,700만 개의 게시물에 사용할 자체 내부 일괄 가져오기 도구를 개발하고 있습니다. 첨부 파일을 제외하면 1주일 넘게 걸리던 작업이, 모든 것을 포함해도 하루 미만이 걸리도록 개선되었습니다. 어제 첫 번째 가져오기 테스트를 오류 없이 완료했습니다. 정말 기대되는 성과입니다.
Justin, 감사합니다. 저도 빠르게 확인해 봤는데, 이렇게 하면 괜찮을까요? (원하시면 공식 임포터에 추가하셔도 됩니다)
XENFORO_DB = "xenforo_db_3"
TABLE_PREFIX = "xf_"
BATCH_SIZE = 1000
ATTACHMENT_DIR = '/FULL/PATH/TO/attachments'
AVATAR_DIR = '/FULL/PATH/TO/avatars'
(마지막 줄 추가^^ - 아바타를 해당 경로로 복사해야 한다는 뜻입니다)
def execute
import_users
import_categories
import_posts
import_avatars
end
(마지막 줄 추가^^)
def import_avatars
if AVATAR_DIR
users = User.all
users.each do |u|
unless u.custom_fields["import_id"].nil?
import_id = u.custom_fields["import_id"]
if import_id.to_i < 1000
dir_num = "0"
elsif import_id.to_i > 1000
dir_num = import_id.first
end
avatar_filename = "#{import_id}.jpg"
file_path = "#{AVATAR_DIR}/l/#{dir_num}"
file_path_and_name = "#{file_path}/#{avatar_filename}"
if File.exists?(file_path_and_name)
upload = create_upload(u.id, file_path_and_name, avatar_filename)
if upload.persisted?
u.import_mode = false
u.create_user_avatar
u.import_mode = true
u.user_avatar.update(custom_upload_id: upload.id)
u.update(uploaded_avatar_id: upload.id)
else
puts "Error: Upload did not persist for #{u.username} #{avatar_filename}!"
end
end
end
end
end
end
여기서 시간이 아주 늦어서 실수를 했거나 누락된 부분이 많을 수 있지만, 모든 아바타가 .jpg 형식이라고 가정했습니다(제 아바타는 모두 그런 것 같습니다). u.import_mode 전환 부분은 확실하지 않아서 주석 처리해 두었습니다.
아직 전혀 테스트하지 않았습니다(여기서 거의 새벽 5시네요
)
개발 머신에서 10만 개의 게시물이 있는 포럼으로 테스트를 해봤는데 90분이 걸렸습니다. 임포트를 진행하려는 포럼은 몇백만 개의 게시물이 있으므로 10배 정도 더 오래 걸릴까요?
좋네요! 우리에게 공유해 주실 건가요? 언제쯤인지 감이 잡히나요?
현재 목표는 완벽하게 작동하는지 확인하는 것입니다. 그리고 우리 사이트가 마이그레이션된 후에는 다른 사람들이 사용할 수 있도록 Discourse 저장소에 배포할 계획입니다.
단계별 가이드도 매우 도움이 될 것 같습니다. 부탁드립니다 ![]()
5천 개의 게시글과 약 600개의 첨부 파일이 있는 경우, 구형 Xeon 프로세서와 SSD 디스크를 사용했을 때 약 10분이 소요되었습니다. 성능이 충분한 기계를 확보해 오프라인으로 가져오기를 수행하고, 처리가 끝날 때까지 방치해 두는 것이 좋습니다.
멋져요! 기대되고 있어요.
음, 아주 빠르게 테스트를 해봤는데 스크립트에 추가한 부분들은 잘 작동하는 것 같아요. 이제 몇 천 명의 멤버와 10만 개의 게시물을 대상으로 제대로 된 테스트를 진행할게요. 잘 작동하면 다시 알려드릴게요…
안녕하세요, 새로운 소식 있나요? 테스트 관련해서 도움이 필요하시면 기꺼이 도와드릴게요.
xenforo 스크립트를 실행할 때 users 테이블이 존재하지 않는다는 오류가 발생합니다. 도움을 주시면 감사하겠습니다!
한 시간 동안 관련 자료를 찾아보았지만 아직 원인을 파악하지 못했습니다.
스크립트 상단에 몇 가지 변수가 있습니다. 이 값을 채워 넣어야 xenForo MySQL 데이터베이스에 연결하고 데이터를 쿼리할 수 있습니다. "import_db"가 플레이스홀더 값일 것으로 생각됩니다. 해당 값들이 올바르게 채워져 있는지 다시 확인해 주세요.
@Ghan 이 명령어로 import_db에 가져오는 건지 모르겠어요: mysql -u root -p import_db < /shared/db.sql
제 xenforo.rb 파일은 다음과 같습니다:
아, 그렇군요. 그게 데이터베이스 이름이라면, 테이블 이름이 올바른지 확인해 보세요. 테이블이 접두사가 포함된 xf_user일 수 있고, 그렇게 되면 문제가 발생할 수 있습니다. 스크립트에는 TABLE_PREFIX 변수도 포함되어 있어야 합니다.
@Ghan 감사합니다!
지금도 import 스크립트에서 막혀 있습니다.
사용자와 카테고리를 순회하는 부분은 문제없이 잘 작동합니다. 그런데 import_posts 함수에서는 몇 시간 동안 멈춰 있다가 결국 타임아웃이 발생합니다.
import_posts에서 값을 출력하며 디버깅을 시작했습니다:
results 변수에 할당된 이후의 모든 출력 문은 실행되지 않습니다.
혹시 vb3 포럼을 가져오려는 분이 계신다면, Xenforo 라이선스도 함께 보유하고 있다면 이 가이드가 도움이 될 수 있습니다:
이 가져오기 도구가 스레드와 함께 해당 스레드에 연결된 태그를 Xenforo에서 가져오나요?
소스 코드를 살펴보는 것은 항상 좋은 생각입니다.
답은 … 네라고 생각합니다 (다만 Xenforo 데이터 구조에 대해 아주 익숙하지는 않아요):
그래서 특정 조건에서 누군가의 태그를 최소한 한 번은 가져온 것으로 보입니다. 운이 좋으면 여러분에게도 작동할 거예요!



