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

فقط 5 آلاف مشاركة، وحوالي 1 ألف عضو

3 إعجابات

ما زلت أنتظر مستورد اللوحة الكبيرة، لأحاول واختبار منشوري البالغ 18 مترًا في المنتدى.

3 إعجابات

هل تقصد Xenforo؟ لدينا عمليات استيراد جماعي أخرى، ولكن صحيح أن هذا سيكون بطيئًا جدًا لـ 18 مليون منشور!

4 إعجابات

نحن نعمل على مستورد جماعي داخلي خاص بنا يحتوي على 27 مليون منشور. انخفضت المدة من أكثر من أسبوع قليلاً (دون احتساب المرفقات) إلى أقل من يوم واحد مع كل شيء. أكملنا أول اختبار للاستيراد أمس دون أي أخطاء. أمور مثيرة حقًا.

4 إعجابات

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

  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 إعجابات

الهدف حاليًا هو التأكد من أنه يعمل بشكل مثالي، ثم بعد هجرة موقعنا، دفعه في النهاية إلى مستودع Discourse حتى يتمكن الآخرون من استخدامه.

5 إعجابات

دليل خطوة بخطوة سيكون مفيدًا جدًا أيضًا، من فضلك :).

إعجاب واحد (1)

بالنسبة لـ 5000 منشور وحوالي 600 مرفق، استغرق الأمر حوالي 10 دقائق على معالج Xeon أقدم مع قرص SSD. أنصحك بالحصول على جهاز ذي قدرة معقولة، وإجراء الاستيراد في وضع عدم الاتصال، والسماح له بالعمل دون انقطاع.

5 إعجابات

رائع! نتطلع إلى ذلك.

إعجاب واحد (1)

حسنًا، أجريت اختبارًا سريعًا جدًا ويبدو أن الإضافات على النص البرمجي قد نجحت – سأقوم الآن بإجراء اختبار حقيقي مع بضعة آلاف من الأعضاء و100 ألف منشور. سأبلغك بنتيجة الاختبار إذا نجح الأمر…

إعجاب واحد (1)

مرحباً، هل هناك أي جديد؟ إذا كنت بحاجة إلى مساعدة في الاختبار، فسأكون سعيداً بالمساعدة.

أواجه خطأً يفيد بأن جدول المستخدمين غير موجود عند تشغيل سكريبت XenForo. أي مساعدة مُقدَّرة جدًا!

قرأت عن هذا لمدة ساعة لكن لم أستطع حله بعد.

هناك بعض المتغيرات في أعلى السكربت تحتاج إلى تعبئتها لكي يتمكن من الاتصال بقاعدة بيانات MySQL الخاصة بـ xenForo واستعلام البيانات. أعتقد أن “import_db” قد تكون القيمة الوهمية — يرجى التحقق مرة أخرى من أن هذه القيم مملوءة بشكل صحيح.

3 إعجابات

@Ghan ظننت أنني أستورد إلى import_db بهذا الأمر: mysql -u root -p import_db < /shared/db.sql

ملف xenforo.rb الخاص بي هو:

حسناً، إذا كان هذا هو اسم قاعدة بياناتك، فتأكد من صحة اسم الجدول. قد يكون اسم الجدول xf_user مع البادئة، مما قد يسبب مشكلة. يجب أن يكون هناك متغير TABLE_PREFIX في السكربت أيضاً.

4 إعجابات

@Ghan شكرًا لك!

في الوقت الحالي، ما زلت عالقًا في سكريبت الاستيراد.
يعمل التكرار عبر المستخدمين والفئات بشكل صحيح. لكن في دالة import_posts، يتوقف البرنامج عن الاستجابة وينتهي الوقت المحدد بعد بضع ساعات.

بدأت عملية التصحيح من خلال طباعة القيم داخل import_posts فقط:

جميع عمليات الطباعة التي تلي تعيين المتغير results لا تظهر أبدًا.

في حال كان أي شخص يبحث عن استيراد منتدى vb3، فقد تساعدك هذه الدليل إذا كانت لديك ترخيص Xenforo أيضًا:

إعجابَين (2)

هل يقوم هذا المستورد باستيراد العلامات من xenforo مع المواضيع المرفقة بها؟

من الجيد دائمًا إلقاء نظرة على الكود المصدري.

أعتقد أن الإجابة هي… نعم (ولكن لست على دراية كبيرة بهياكل بيانات Xenforo):

3 إعجابات

إذًا، يبدو أنه استورد بعض العلامات مرة واحدة على الأقل لشخص ما في ظل ظروف معينة. إذا كنت محظوظًا، فسيعمل معك أيضًا!

3 إعجابات