طلب تحسين لسكربت استيراد phpBB3

جربت هذا أيضاً:

> root@vps116136-import:/var/www/discourse/config# su discourse -c “bundle exec rake db:drop”
> exec: line 1: “bundle: command not found

عذرًا، كان يجب أن أتوقع هذه الفحوصات.

حاول تشغيل أمر الإسقاط (drop) باستخدام متغير البيئة هذا:

cd /var/discourse
./launcher enter <your-container-name>

su discourse
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

هذا الأمر تحديدًا لم ينجح لأنك لم تكن في الدليل الذي يحتوي على ملف Gemfile الخاص بالمشروع، وهو في حالتك: /var/www/discourse.

ملاحظة سريعة: الطريقة الأسهل كانت ستكون امتلاك نسخة احتياطية منذ البدء الأول للمنتدى، بحيث يمكنك استعادتها قبل محاولة الاستيراد مرة أخرى، ولكن بافتراض أنك لم تكن تملك واحدة، فقد انتهى بنا الأمر بهذا المسح الناعم (soft reset).

إعجابَين (2)

لا يزال لا يوجد أي تفاعل.

root@vps116136-import:/var/www/discourse# su discourse
discourse@vps116136-import:/var/www/discourse$ DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse
Couldn’t drop database ‘discourse’
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse (ActiveRecord::StatementInvalid)

…

أحاول الآن بصفتي الجذر (root)…

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

لا.

root@vps116136-import:/var/www/discourse# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop
fatal: detected dubious ownership in repository at ‘/var/www/discourse’
To add an exception for this directory, call:

    git config --global --add safe.directory /var/www/discourse

rake aborted!

انسَ تعليماتي الأولى :smiling_face_with_tear:

  1. استخدم docker cp لنسخ آخر نسخة احتياطية لك خارج الحاوية. توجد النسخ الاحتياطية داخل /shared/backups/default.
  2. احذف المجلد المشترك من دليل التثبيت الخاص بك (المكان الذي تستدعي منه ./launcher): rm -rf /var/discourse/shared
  3. أعد بناء الحاوية باستخدام ./launcher rebuild <container-name>.

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

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

سيستغرق الأمر بعض الوقت. ملف tar.gz حجمه 15 جيجابايت.

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

في الواقع، سيستغرق الأمر…

200

لقد تم إنجاز 0.5 جيجابايت منذ أن بدأت.

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

انتهيت.

تم.

اكتمل. جاهز لتشغيل برنامج الاستيراد النصي، ولكن…

/var/discourse/shared/standalone/import
├── data
├── mysql
└── settings.yml

لقد أتلفت هذا الأمر :backhand_index_pointing_up:، أليس كذلك.

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

نعم.

أفترض أنك أنشأت مجلدًا (volume) لحاوية mysql الخاصة بك داخل المجلد المشترك. إذا كان الأمر كذلك، فمن المؤسف أنك ستحتاج إلى إعادة تشغيل الحاوية واستعادة قاعدة البيانات مرة أخرى.
يمكنك ببساطة نسخ المرفقات.
لا ينبغي أن يكون إعداد ملف settings.yml صعبًا جدًا مرة أخرى.

لست متأكدًا مما يعنيه إعادة تشغيل الحاوية. في المرة الأولى وضعت phpbb_mysql.sql في دليل mysql وفقًا لـ هذه التعليمات. هل هناك المزيد مما يجب القيام به بخلاف ذلك؟

يمكنك ببساطة نسخ المرفقات.

نعم. باستثناء أن ملف tar.gz يبلغ حجمه 15 جيجابايت لأن هناك 45 جيجابايت من البيانات في دليل phpBB /files. كنت أدير لوحتي لمدة 22 عامًا، أتعلم! لذا نعم، سأقوم بنسخها مرة أخرى. ولكن على الأرجح، سيكون ذلك غدًا قبل أن أستأنف هذا الأمر.

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

نعم، هذه هي طبيعة عمليات ترحيل المنتديات. نصيحة جيدة ستكون البدء بعينة أصغر وبعد إتقان العملية يمكنك إجراء استيراد كامل.

هناك جهود جارية لجعل الأدوات أكثر مرونة ولجعل العملية أقل تكرارًا، ولكن هذا موضوع معقد للغاية.

آمل أن يسير كل شيء على ما يرام في محاولتك غدًا.

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

أتفق! لكن phpBB لا يسهل تقليل حجم العينة. أنا عالق نوعًا ما بما لدي. ومع ذلك، كانت بيئة اختبار، ولا يوجد شيء لا يمكن استرداده.

شكرًا! سأعود وأخبركم هنا. بالمناسبة، بما أنني أصبحت خبيرًا في docker cp :zany_face:، هل سيكون من الصعب تعديل سكربت روبي لطباعة post_id الخاص بـ phpBB عندما يحدث شيء كهذا؟

8000 / 24451 ( 32.7%) [677 items/min] W, [2026-01-13T02:50:22.466363 #25640] WARN – : Bad date/time value “0000:00:00 00:00:00”: mon out of range
W, [2026-01-13T02:50:22.466500 #25640] WARN – : Bad date/time value “0000:00:00 00:00:00”: mon out of range
W, [2026-01-13T02:50:22.466600 #25640] WARN – : Bad date/time value “0000:00:00 00:00:00”: mon out of range

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

ما زلت هنا! أقوم بتنظيف بعض الأشياء، قبل أن أعيد الاستيراد، وأعمل على حل بعض المشاكل. أنتظر كلود ليعطيني أي رد، قبل أن أعمل على التالي. لكني سأعود…

disperse-lesley-nielsen

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

حسنًا! لقد قمت بفرز آخر لقطة لي بدون مساعدة كلود، وبدأت الاستيراد. عقبة أخرى:

بدأ استيراد phpBB3…

/var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:49:in initialize’: undefined method `’ for nil (NoMethodError)

  @site_name = import_settings["site_name"]
                              ^^^^^^^^^^^^^
    from /var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:11:in `new'
    from /var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:11:in `load'
    from script/import_scripts/phpbb3.rb:20:in `<module:PhpBB3>'
    from script/import_scripts/phpbb3.rb:16:in `<module:ImportScripts>'
    from script/import_scripts/phpbb3.rb:15:in `<main>'
إعجاب واحد (1)

لا مشكلة، خطئي. ملف settings.yml تالف. أعتذر، ربما لن أعود إلى هذا الأمر حتى الغد.

إعجابَين (2)

يمكنك اللعب باستخدام تصحيح الأخطاء (debugging) في pry، يمكنك إضافة نقاط توقف (breakpoints) في الكود لفتح pry عند تنفيذها. يتيح لك هذا الحصول على واجهة سطر أوامر تفاعلية (interactive cli) لإلقاء نظرة على البيانات. أو ببساطة أضف puts row[:post_id] في الدالة process_post، بحيث عندما يصدر التحذير يمكنك رؤية آخر مُعرّف (id).

3 إعجابات

نعم - هذا بالضبط! بسيط بالنسبة لك، وليس كذلك بالنسبة لي :zany_face: لقد استخدمت Xdebug بشكل مكثف لتصحيح أخطاء PHP من جانب الخادم أثناء تطوير اختراقاتي، ولكني رسميًا في مرحلة “الكلب العجوز والحيل الجديدة” من حياتي. إذا كان بإمكانك تزويدي بالشرح المفصل، سأكون سعيدًا بإجراء هذا التعديل - لكنني لن أتظاهر بأنني أستطيع اختراق لغة روبي. ليس بعد على أي حال…

ملاحظة: سيسمح لي كلود بمقابلة بعد 28 دقيقة، وآمل أن أتمكن من المتابعة في عملية الاستيراد بعد تجاوز العقبة الحالية.

حسنًا، يتم تشغيل برنامج الاستيراد النصي بملفات .rb المنقحة. سأعود إليك (تثاؤب) في الصباح.

إعجابَين (2)

أوه-أوه. إليك ما أراه في منشور يحتوي على الكثير من الصور:

قبل تثبيت وحدة التحكم الرئيسية في الفرامل (MBC)، يجب تثبيت حلقة سدادة قضيب الدفع للأسطوانة الرئيسية الأصلية. الحلقة التي تأتي مع المجموعة صغيرة جدًا. إزالة خزان ضغط الهواء من وحدة PS تتيح وصولاً سهلاً لوضع أنابيب الفرامل الجديدة.

~~\[attachment=13\]51.jpg\[/attachment\]\[attachment=12\]52.jpg\[/attachment\]\[attachment=11\]53.jpg\[/attachment\]\[attachment=10\]54.jpg\[/attachment\]\[attachment=9\]55.jpg\[/attachment\]\[attachment=8\]56.jpg\[/attachment\]\[attachment=7\]57.jpg\[/attachment\]\[attachment=6\]58.jpg\[/attachment\]\[attachment=5\]59.jpg\[/attachment\]\[attachment=4\]60.jpg\[/attachment\]\[attachment=3\]61.jpg\[/attachment\]\[attachment=2\]62.jpg\[/attachment\]\[attachment=1\]63.jpg\[/attachment\]\[attachment=0\]~~64.jpg\[/attachment\]

إليك كيف بدا هذا المنشور في phpBB:

لقد أفسدت بطريقة ما نسخة دوكر (Docker) الخاصة ببيئة الاختبار الخاصة بي. أنا بصدد إعادة إنشائها.

بدلاً من تعديل البرنامج النصي للاستيراد، سأقوم بأخذ لقطة (snapshot) ومعالجتها لاحقًا باستخدام برنامج نصي سيأخذ مستخرجًا من attach_ids و filenames و comments ويحاول إضافتها كتعليقات توضيحية للصور (بمساعدة بسيطة من كلود). لست متفائلاً للغاية، ولكني سأعلمكم كيف تسير الأمور.

فيما يتعلق بتلك التحذيرات حول قيم التاريخ/الوقت السيئة، هذا ما قاله كلود:

التحذير قادم من أداة EXIFR، التي تقرأ بيانات EXIF من ملفات الصور (المرفقات الخاصة بك). لا يتعلق الأمر بتواريخ النشر على الإطلاق - بل يتعلق بالبيانات الوصفية (metadata) الموجودة في ملفات الصور نفسها.

يظهر التحذير عند معالجة المرفقات التي تحتوي على بيانات تاريخ/وقت EXIF غير صالحة. هذا تجميلي ولن يؤثر على عملية الاستيراد الخاصة بك.

وهو ما كنت تعتقده، يا @pfaffman. ولكني سعيد بمعرفة الآن سبب ظهور التحذير.

إعجابَين (2)