Ein XenForo-Forum zu Discourse migrieren

Danke, Justin. Ich habe mir das ebenfalls kurz angesehen – sieht das für dich in Ordnung aus? (Falls du magst, kannst du es gerne zum offiziellen Importer hinzufügen.)

  XENFORO_DB = "xenforo_db_3"
  TABLE_PREFIX = "xf_"
  BATCH_SIZE = 1000
  ATTACHMENT_DIR = '/FULL/PATH/TO/attachments'
  AVATAR_DIR = '/FULL/PATH/TO/avatars'

(Habe die letzte Zeile hinzugefügt^^ – das bedeutet, du musst die Avatare dorthin kopieren.)

  def execute
    import_users
    import_categories
    import_posts
    import_avatars
  end

(Habe die letzte Zeile hinzugefügt^^)

  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

Es ist hier schon sehr spät, daher habe ich vielleicht einige Fehler gemacht oder einiges vergessen. Dabei gehe ich davon aus, dass alle Avatare .jpg sind (was bei meinen allen der Fall zu sein scheint). Bei den u.import_mode-Schaltern war ich mir nicht ganz sicher, daher habe ich sie einfach auskommentiert.

Völlig ungetestet (es ist hier fast 5 Uhr morgens :zzz:)

Ich habe auf meiner Dev-Maschine einen Test mit einem Forum von 100.000 Beiträgen durchgeführt, und das dauerte 90 Minuten. Das Forum, das ich importieren möchte, hat einige Millionen Beiträge, also vielleicht das Zehnfache?

Toll! Werdet ihr ihn mit uns teilen? Hast du eine Ahnung, wann?

4 „Gefällt mir“