نقل منتدى XenForo إلى Discourse

شكرًا لك يا جاستن، لقد ألقيت نظرة سريعة عليها - هل يبدو هذا مقبولاً لديك؟ (لا تتردد في إضافتها إلى أداة الاستيراد الرسمية إذا أردت)

  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:)

لقد أجريت اختبارًا على جهاز التطوير الخاص بي على منتدي يحتوي على 100 ألف منشور واستغرق الأمر 90 دقيقة. المنتدي الذي أريد إجراء الاستيراد عليه يحتوي على بضعة ملايين من المنشورات، لذا ربما يستغرق الأمر 10 أضعاف ذلك؟

رائع! هل ستشاركونها معنا؟ هل لديك أي فكرة عن التوقيت؟

4 إعجابات