Migrar um fórum XenForo para Discourse

Obrigado, Justin. Dei uma olhada rápida nisso — parece ok para você? (Sinta-se à vontade para adicioná-lo ao importador oficial, se quiser)

  XENFORO_DB = "xenforo_db_3"
  TABLE_PREFIX = "xf_"
  BATCH_SIZE = 1000
  ATTACHMENT_DIR = '/CAMINHO/COMPLETO/DO/attachments'
  AVATAR_DIR = '/CAMINHO/COMPLETO/DO/avatars'

(Adicionei a última linha^^ — significa que você precisará copiar os avatares para lá)

  def execute
    import_users
    import_categories
    import_posts
    import_avatars
  end

(Adicionei a última linha^^)

  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 "Erro: Upload não persistiu para #{u.username} #{avatar_filename}!"
            end
          end
        end
      end
    end
  end

É muito tarde aqui, então posso ter cometido alguns erros ou esquecido muita coisa, mas isso assume que todos os avatares são .jpg (o que parece ser o caso de todos os meus). Não tinha certeza sobre as comutações u.import_mode, então apenas comentei-as.

Totalmente não testado (são quase 5h da manhã aqui :zzz:)

Fiz um teste na minha máquina de desenvolvimento em um fórum com 100 mil posts e levou 90 minutos. Aquele que quero importar tem alguns milhões de posts, então talvez 10 vezes mais?

Legal! Vocês vão compartilhá-lo conosco? Alguma ideia de quando?

4 curtidas