كلود كود - إحياء vBulletin الميت من عام 2016

أردت فقط مشاركة تجربة للمسؤولين الأقل مهارة ومعرفة الذين يكافحون من أجل إنجاز الأمور. بدأ الأمر عندما سألته عن بعض المشكلات المستمرة. كان يعطيني أوامر ويوجهني خلال الأمور. لكن الاختراق الحقيقي كان عندما قمت بتوصيل كود كلود مباشرة عبر SFTP و SSH…

image

بمجرد الاتصال، قام ببعض الأشياء المذهلة! يتم استخدام Discourse الخاص بنا فقط لمجموعة من الأصدقاء، لذلك ليس لدينا الكثير من الميزانية للقيام بالأشياء إذا ساءت الأمور. اكتشف كلود كود مؤخرًا كل أنواع الأشياء الصغيرة الخاطئة في إعداداتي.

  • قام بتصحيح إعداد S3 على Spaces الخاص بي. كنت قريبًا، لكنه لا يزال يواجه بعض المشكلات في تحميل أصول JS بشكل صحيح عند إعادة البناء. القصة الكاملة هنا: Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO

    • لقد قام بضبطه بشكل صحيح
  • أصلح تحميل JS الخاص بـ X.com Discourse بدلاً من استخدام مفتاح API

  • أرشدني خلال إعداد CDN وإعدادات DNS الخاصة بـ Cloudflare وكل شيء

    • أعاد خبز كل شيء
  • اكتشف 4000 صورة Tapatalk يتيمة من ترحيل phpBB القديم الخاص بنا وربطها

  • حوّل مجموعة من BBCode القديمة إلى HTML حتى تعمل الصور

  • اكتشف أن وحدة التخزين الخاصة بي في Digital Ocean كانت فارغة تمامًا وأعطاني الثقة للضغط على DELETE وتوفير $/شهر. كنت قد نقلت كل شيء إلى S3، أو على الأقل كنت متأكدًا من ذلك، لكنني كنت لا أزال متوترًا جدًا لحذفه. محرج حقًا، لكني لم أرغب في فقدان أي صور.

لكن ما كان أكثر متعة هو أنه أعطاني الثقة لتولي مشروع آخر، وهو إحياء لوحة vBulletin القديمة الخاصة بنا التي كانت تعمل من 2002 إلى 2016 لنادي جامعي. لقد ساءت حالتها وتم إيقاف تشغيلها أخيرًا بعد أن أعطت بضعة هواتف فيروس نقص المناعة البشرية. كان قادرًا على أخذ نسخة احتياطية قديمة وفكها وإعادة بنائها.

لقد قام بعمل مثير للإعجاب:

  • استيراد 12,394 موضوعًا و 282,096 مشاركة
    • كانت قاعدة البيانات تالفة لدرجة أننا قمنا بتصدير أجزاء منها كجداول منفصلة، أو أجزاء من الجداول، كملفات CSV لأنها لن تقوم بملف SQL كامل. أكثر من 25 ملفًا فرديًا. لقد قام بتجميعها معًا ثم أنشأ ملف استيراد Discourse.
  • ترحيل وإعادة توصيل 9,504 صورة من النسخة الاحتياطية
    • ثم ذهب وسحب بعض الصور المفقودة من WayBackMachine وعمليات الاستيراد الأخرى. أعطيته نسخة احتياطية من phpGallery2 التي استخدمناها في ذلك الوقت ووجد 288 صورة إضافية وربطها عبر 735 مشاركة أخرى.
    • لقد رميت عليه الدلائل وملفات النسخ الاحتياطي المضغوطة وهو قام بفرز وإيجاد كل أنواع الأشياء وربطها مباشرة
    • لم يتمكن من فعل الكثير بشأن أكثر من 7000 صورة كانت على Photobucket، للأسف
    • سحب 780 صورة أخرى مرتبطة برابط ساخن
  • استعادة 143 من أصل 159 اسم مستخدم تم حذفها سابقًا وكانت تظهر فقط كـ “system”
    • كما وجد صور الرمز الخاصة بهم
    • لقد وجد حتى صورة الرمز القديمة الخاصة بي، صورة لأفضل صبي جيد على الإطلاق!
  • قام بحذف أكثر من 5000 كلمة “جامعية” تُعرف بمودة باسم: تقرير التشهير
  • قام بإنشاء شعارات جديدة بناءً على بعض الأجزاء القديمة التي كانت لديه من الملفات
  • قام باستعادة جميع رموز تعبيرية vbulletin الكلاسيكية وربطها بجميع المشاركات
    • أفاد أن :flipoff2: كان الرمز التعبيري الأكثر استخدامًا (19,191 مرة)، يليه :rolleyes : و :beer : (متابعون بعيدون)
  • سمح ببعض البحث والاستبدال على الأسماء أو أرقام الهواتف أو رسائل البريد الإلكتروني التي كانت عامة.
  • أرشدني خلال الانتقال إلى Resend API
  • أرشدني خلال تكوين SSL
  • أرشدني خلال تكوين CORS
  • ثم قبل أن نتعمق في الأمر كثيرًا، قام بتشغيل فحص ClamAV على جميع الملفات

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

أنا معجب أيضًا تمامًا بوجود بشر يعرفون ما يفعله هذا…

اسمح لـ Claude بتشغيل cat << 'RUBY' > /tmp/tapatalk_analysis.rb posts_with_tapatalk = Post.where(“raw LIKE ‘%uploads/tapatalk/%’”).where(deleted_at: nil) dual_ref_count = 0 tapatalk_only_count = 0 tapatalk_only_files = posts_with_both = 0 posts_tapatalk_only = 0 posts_with_tapatalk.find_each do |post| raw = post.raw tapatalk_urls = raw.scan(/uploads/tapatalk/\[^\\s"'\u003c\u003e)\]\]+/) has_upload_ref = raw.include?(“upload://”) post_has_dual = false post_has_only = false tapatalk_urls.each do |url| idx = raw.index(url) next unless idx start_pos = \[idx - 200, 0\].max context = raw\[start_pos..idx + 10\] if context \u0026\u0026 context.include?(“upload://”) dual_ref_count += 1 post_has_dual = true else tapatalk_only_count += 1 post_has_only = true tapatalk_only_files \u003c\u003c url unless tapatalk_only_files.include?(url) end end posts_with_both += 1 if post_has_dual posts_tapatalk_only += 1 if post_has_only end puts “=== TAPATALK IMAGE ANALYSIS ===” puts “Dual reference (upload:// + tapatalk): #{dual_ref_count} refs” puts “Tapatalk only (no upload:// nearby): #{tapatalk_only_count} refs” puts “Unique tapatalk-only files: #{tapatalk_only_files.length}” puts “Posts with at least one dual ref: #{posts_with_both}” puts “Posts with at least one tapatalk-only ref: #{posts_tapatalk_only}” puts “—SAMPLE TAPATALK-ONLY FILES—” tapatalk_only_files.first(15).each { |f| puts f } RUBY scp /tmp/tapatalk_analysis.rb root@23.21.11.54:/tmp/ 2\u003e/dev/null \u0026\u0026 echo “Uploaded”?

مثير للإعجاب للغاية.

على أي حال، أردت فقط المشاركة في حال كان من الممكن أن تساعد الفكرة في تحفيز شيء ممتع لأي شخص آخر. احصل على نسخة احتياطية جيدة ودعها تنطلق!

سعيد في Discourse. :victory_hand:

8 إعجابات