Migrate a XenForo forum to Discourse

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시네요 :zzz:)

개발 머신에서 10만 개의 게시물이 있는 포럼으로 테스트를 해봤는데 90분이 걸렸습니다. 임포트를 진행하려는 포럼은 몇백만 개의 게시물이 있으므로 10배 정도 더 오래 걸릴까요?

좋네요! 우리에게 공유해 주실 건가요? 언제쯤인지 감이 잡히나요?

4개의 좋아요