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

يجب أن يعمل Markdown أيضًا، ولكن أعتقد أن استخدام <strong> يمكن أن يتجاوز المزيد من الحالات الشاذة. ضع في اعتبارك أن خلط HTML و Markdown له بعض المشاكل أيضًا… إليك حل Markdown بسيط:

**multiline\
\
text**

أنا فضولي، من أي إصدار من phpBB تقوم بالاستيراد؟ تحويل BBCode إلى Markdown أفضل بكثير للإصدار 3.2 مقارنة بالإصدارات السابقة. من الناحية المثالية، لا يجب أن ترى [b] في المشاركات المستوردة بعد الآن.

إعجابَين (2)

أعتقد أنك على حق، لا أعرف لماذا لم أفكر في ذلك أولاً…

أنا أقوم بالترحيل من phpBB 3.0.7-PL1.

إعجابَين (2)

ستقدم لنفسك خدمة كبيرة إذا قمت بالترقية إلى 3.2 قبل الاستيراد. :wink:

تأكد من ترحيل BBCodes في جميع المشاركات إلى تنسيق التخزين الجديد عن طريق تشغيل محلل phpBB: https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

3 إعجابات

لقد فكرت في ذلك في البداية، ولكن… أنا أكره الأمور المتعلقة بالكمبيوتر :sweat_smile:
لا أعرف phpBB جيدًا ولم أرغب في التعامل مع أي خطأ قد يحدث أثناء التحديث من إصدار قديم جدًا.

نظرًا لأن برنامج نصي لترحيل Discourse متوافق مع phpBB 3.0، فقد اخترت عدم ترقية phpBB…
ربما تم تجنب بعض مشاكل bbcode التي واجهتها مع ترقية phpBB. أشياء مثل القوائم المتداخلة، [b] مع أسطر جديدة، إلخ… :man_shrugging:

ولكن بما أنني بدأت العمل على الاستيراد في ديسمبر، فقد اقتربت من الحصول على استيراد يعمل بشكل جيد (من الناحية المثالية، سيكون المنتدى الجديد عبر الإنترنت ربما في غضون أسبوعين…) ولست متأكدًا من أنني أرغب في تجربة ترقية phpBB الآن، خاصة إذا كان عليّ مراجعة جميع إصلاحات الاستيراد المخصصة التي قمت بها لمعرفة ما إذا كان مستورد phpBB 3.2 يتعامل مع هذه الأشياء بشكل أفضل :sweat_smile:. سيكون ذلك مستهلكًا للوقت.

ومع ذلك… يمكنني تجربة الأشياء في عطلة نهاية الأسبوع هذه ~~~~ بعد الظهر إذا كنت أشعر بالملل بما فيه الكفاية!


تعديل: لقد حاولت؛ الانتقال إلى خادم جديد ثم الترقية إلى pbpBB 3.2 يمثل مشكلة. مشاكل HTTPS. مشاكل التخزين المؤقت. مشاكل أخرى. إجراءات ملتوية ومحبطة. ينصح الدليل الرسمي باستخدام أدوات تتطلب إصدار PHP قديمًا (مرحبًا، PHP 5، وقت طويل لم أره…). على ما يبدو، أنا أحيانًا أشعر بالملل ولكن لست مجنونًا - ليس بما يكفي للقيام بهذا النوع من الأشياء على الأقل.

غيرهارد! أنت مضلل! الترقية إلى 3.2 ليست خدمة كبيرة! :laughing:

ولكن كفى حديثًا عن phpBB نفسه… وامدح الترقية بنقرة واحدة من Discourse.

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

مرحباً،

أحاول ترحيل مستخدمي ووردبريس إلى ديسكورس. تمكنت من اتباع التعليمات للاتصال بقاعدة بيانات ووردبريس الخاصة بنا واستيراد المستخدمين في حاوية دوكر. أردت التأكد من عدم إرسال أي رسائل بريد إلكتروني أثناء أو بعد الترحيل لأننا نستخدم إضافة ووردبريس SSO.

لقد قمت بوضع بادئة للبريد الإلكتروني بـ “import_” حتى لا يتلقوا أي رسائل في حال كانت هناك مهام خلفية ترسل تأكيد البريد الإلكتروني بعد اكتمال الترحيل.

أرى أن هناك عمود last_emailed_at تم تعيينه بعد الترحيل:

أعلم أنه تم تعيينه بواسطة opts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now) في ImportScripts::Base::create_user()

هل هناك وظيفة مشابهة لـ admin.email_tokens.update_all(confirmed: true) المستخدمة في ImportScripts::Base::create_admin حيث يتم تأكيد البريد الإلكتروني؟

لا أرى أي سجل يوضح إرسال رسائل البريد الإلكتروني. هل تم إرسال رسائل بريد إلكتروني بالفعل؟ هل سيحاول ديسكورس إرسال رسائل بريد إلكتروني بعد تغيير البريد الإلكتروني إلى عناوين صالحة؟

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

هذا خارج الموضوع، بما أن هذا الموضوع يتعلق بترحيل phpBB3… :wink:

أوصي باستخدام نطاق .invalid إذا كنت تريد التأكد من أن بعض المستخدمين لن يتلقوا أي رسائل بريد إلكتروني أبدًا (على سبيل المثال، foo@mywpimport.invalid). ولكن، إذا كنت تريد فقط تعطيل رسائل البريد الإلكتروني الصادرة حتى تكون جاهزًا، فإن تعيين إعداد الموقع disable_emails على “yes” أو “non-staff” هو خيارك الأفضل!

يتم تعطيل رسائل البريد الإلكتروني الصادرة تلقائيًا أثناء الاستيراد. من المحتمل أن تكون قيم السمة last_emailed_at من Discourse محاولة إرسال بريد إلكتروني، قبل أن تكتشف أنه غير مسموح لها بذلك.

سيحاول Discourse بالتأكيد إرسال رسائل بريد إلكتروني بعد الترحيل.

إعجابَين (2)

شكرًا، لقد جربت أولاً سلسلة فارغة لحقل البريد الإلكتروني وقامت الفئة الأساسية ImportScript بإنشاء رسائل بريد إلكتروني وهمية بنطاق غير صالح. لديهم أيضًا السمة last_emailed_at مضبوطة.

إذًا ما تقوله هو بمجرد أن أقوم بتصحيح البريد الإلكتروني من قاعدة البيانات، ستحاول Discourse إرسال البريد الإلكتروني؟ لكن تسجيل الدخول العادي المصادق عليه بواسطة WordPress لا يتطلب تأكيد البريد الإلكتروني. لا توجد طريقة لتجاوز ذلك باستخدام ImportScript؟

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

تم الانتهاء من الترحيل بنجاح.
ومع ذلك، أواجه مشكلتين. اسمحوا لي أن أعرف إذا كان الموضوع خارج نطاق النقاش.

  1. يحتوي محتوى بعض المشاركات على هذا النوع من المحتوى:
[url=https://www.casimages.com/i/1907271141431956116331631.jpg.html][ 
[img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img][/url]

تظهر الصور في المعاينة، ولكنها معطلة في المشاركة نفسها، حتى بعد إعادة بناء HTML:

HTML المُنشأ لكل صورة هو:

<p><a href="https://www.casimages.com/i/1907271151181956116331666.jpg.html" data-bbcode="true"><span alt="" class="broken-image" title="This image is broken"><svg class="fa d-icon d-icon-unlink svg-icon" aria-hidden="true"><use href="#unlink"></use></svg></span></a></p>

أواجه هذه المشكلة في العديد من المشاركات. هل لديك أي فكرة لإصلاح ذلك بشكل شامل؟

  1. مثل العديد من المنتديات القديمة، فإن روابط Imageshack القديمة معطلة منذ فترة طويلة، وإلى الأبد. ولكن بعض الروابط تعرض الآن علم أوكرانيا بدلاً من لا شيء:

كيف ستتعامل مع هذا السلوك؟
أنا منفتح على أي فكرة، ولكن لدى مسؤول المنتدى نسخة ثابتة للمنتدى بأكمله على قرص صلب قديم، حيث تكون معظم الصور القديمة صالحة (تم تنزيلها وتخزينها محليًا). أفكر في أنه في المستقبل قد أتمكن من إنشاء برنامج نصي يستبدل جميع روابط Imageshack “المعطلة” بالصور الصالحة من النسخة الثابتة. يبدو هذا صعبًا للغاية، ولكن لهذا السبب، لست متأكدًا من أنني أريد ببساطة إزالة جميع روابط Imageshack من المنتدى عن طريق استبدالها بسلسلة فارغة أو شيء من هذا القبيل.

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

هل فاصل الأسطر هو سبب المشكلة؟ هذا ما أتوقعه. ستحتاج إلى إعادة تعيين أكواد BBC هذه لإزالة فاصل الأسطر. Replace a string in all posts يجب أن يكون مفيدًا.

ربما تحويلها إلى تعليقات HTML في الوقت الحالي؟ يمكنك لاحقًا استبدالها بالصور المخزنة.

إعجابَين (2)

لا يبدو أن هذا هو السبب:
لقد أضفت فواصل أسطر لكي يبدو المحتوى هكذا:

[url=https://www.casimages.com/i/1907271141431956116331631.jpg.html]

[img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img]

[/url]

والنتيجة:

أمثلة للمشاركات:

نعم، هذه فكرة جيدة! :+1: إذًا، بشكل أساسي، استبدال السلاسل النصية (من الموضوع الذي ربطته) باستخدام تعبيرات نمطية لاستهداف روابط Imageshack فقط، صحيح؟

إعجابَين (2)

إذًا، هذه ليست المشكلة بعد التجربة مع أسطر جديدة.

ولكن إذا قمت بنسخ ولصق محتوى المنشور في منشور جديد في نفس المنتدى، يتم عرض المحتوى بشكل صحيح :woozy_face: :question: :


(وكذلك يتم تنزيل الصور المرتبطة بنجاح محليًا)

مقابل:

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

على حد علمي، المحتوى الخام لكلا المنشورين متطابق تمامًا.

لكن المحتوى المطبوخ من المنشور الأول (السطر الثاني) يؤدي إلى صور مكسورة:

أنا في حيرة من أمري.

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

Odd thing:
If I try to rebuild the HTML of any post, I got an error 500:

Logs show a fatal error and a warning:

Screenshot of the log window:

Fatal error:

ArgumentError (wrong number of arguments (given 0, expected 1)) lib/guardian/ensure_magic.rb:11:in 'method_missing' app/controllers/posts_controller.rb:570:in 'rebake' app/controllers/application_cont

plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
lib/guardian/ensure_magic.rb:11:in `method_missing'
app/controllers/posts_controller.rb:570:in `rebake'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:358:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.2.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:202:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

It was in safe-mode with all theme and plugins disabled, but this code block mentions on the first line:
plugins/discourse-chat/lib/guardian_extensions.rb:71:in 'can_rebake?'

Warning:

Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 0, expected 1)

/var/www/discourse/plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
/var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'
/var/www/discourse/app/controllers/posts_controller.rb:570:in `rebake'
actionpack-6.1.4.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:228:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n-1.10.0/lib/i18n.rb:328:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `block in instrument'
activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `instrument'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord-6.1.4.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:165:in `process'
actionview-6.1.4.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack-6.1.4.1/lib/action_controller/metal.rb:190:in `dispatch'
actionpack-6.1.4.1/lib/action_controller/metal.rb:254:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:842:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.3/lib/rack/head.rb:12:in `call'
actionpack-6.1.4.1/lib/action_dispatch/http/permissions_policy.rb:22:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:358:in `call'
rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster-2.10.1/lib/logster/middleware/reporter.rb:43:in `call'
railties-6.1.4.1/lib/rails/rack/logger.rb:37:in `call_app'
railties-6.1.4.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:23:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.3/lib/rack/method_override.rb:24:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiler.rb:249:in `call'
message_bus-4.2.0/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:202:in `call'
railties-6.1.4.1/lib/rails/engine.rb:539:in `call'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

Do this information help?
I’m doing what I can to try to repair these posts, but I’m starting to believe this has something to do with Discourse itself and not something on my side maybe? :person_shrugging:


edit: see the automatically linked post below.


Issue resolved:

Now I just have to rebake all my posts. :wink:


Another edit:

Could have worked for sure, and will for images that still have their old plain URL, but:

  • Since all the old Imageshack broken links were replaced by valid images displaying a Ukraine flag by Imageshack itself, they were automatically uploaded to Discourse, changing their URL to a markdown local image link.

  • Fortunately, all these flags were uploaded to Discourse with identical links (![](upload://sOlmOE8qRgLUJ8cCe6N1JNkDV3Y.jpeg) in my case - excellent Discourse behavior by the way :+1:), which means that they will be very easy to target and remove/replace with something else. :slight_smile:

I’m just writing this to inform people that would encounter the same issue as me after a migration.

4 إعجابات

يبدو أن قيمة poll_option_total خاطئة في بعض الأحيان. أرى أصواتًا غير مجهولة أكثر لكل خيار من قيمة poll_option_total. وجميع هؤلاء المستخدمين موجودون.

استخدام GREATEST(..., 0) يصلح الأمر. على الأقل، لا يتعطل.

        SELECT o.poll_option_id, o.poll_option_text, o.poll_option_total AS total_votes,
          GREATEST(CAST(o.poll_option_total AS SIGNED) - (
            SELECT COUNT(DISTINCT v.vote_user_id)
              FROM #{@table_prefix}poll_votes v
                JOIN #{@table_prefix}users u ON (v.vote_user_id = u.user_id)
                JOIN #{@table_prefix}topics t ON (v.topic_id = t.topic_id)
              WHERE v.poll_option_id = o.poll_option_id AND v.topic_id = o.topic_id
          ),0) AS anonymous_votes
        FROM #{@table_prefix}poll_options o
        WHERE o.topic_id = #{topic_id}
        ORDER BY o.poll_option_id
3 إعجابات

أرغب حقًا في ترحيل منتدى phpbb 3.3 الخاص بشركتي إلى Discourse. هل لدى أي شخص أي فكرة عن موعد دعم ذلك؟

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

رائع، هذا عظيم! شكرًا لك!

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

إذا كان يجب عليّ بدء سلسلة محادثات جديدة لهذا، فأنا أعتذر مقدمًا.

لدي منتدى phpBB في مجلد فرعي:

thedomain.com/forum/

أخطط لاستخدام البرنامج النصي للاستيراد للترحيل من phpBB إلى Discourse في نطاق فرعي؛ أي:

forum.thedomain.com

لذلك، يبدو أن كل ما سأحتاج إلى القيام به - للنطاق والروابط الدائمة - هو تعيين ما يلي في settings.yml باستخدام HTTPS على الموقع الجديد:

site_prefix:
    # this is needed for rewriting internal links in posts
    original: thdomain.com/forum    # without http(s)://
    new: https://forum.thedomain.com       # with http:// or https://

  # Enable this, if you want to redirect old forum links to the the new locations.
  permalinks:
    categories: true  # redirects   /viewforum.php?f=1            to  /c/category-name
    topics: true      # redirects   /viewtopic.php?f=6&t=43       to  /t/topic-name/81
    posts: true      # redirects   /viewtopic.php?p=2455#p2455   to  /t/topic-name/81/4
    # Append a prefix to each type of link, e.g. 'forum' to redirect /forum/viewtopic.php?f=6&t=43 to /t/topic-name/81
    # Leave it empty if your forum wasn't installed in a subfolder.
    prefix: forum

وبعد ذلك، على الخادم الأصلي، الذي يعمل بنظام Apache، في ملف .htaccess مع تمكين RewriteEngine بالفعل، سأحتاج إلى:

RewriteCond %{HTTP_HOST} ^thedomain.com
RewriteRule ^forum/(.*)$ https://forum.thedomain.com/$1 [L,R=301]

إذا كان الأمر بهذه السهولة حقًا، فهذا البرنامج النصي رائع! :grinning:

لدي بعض الأسئلة الإضافية:

  1. تم تعيين “المنشورات” على “false” في إعدادات الروابط الدائمة. أعرف أن هناك روابط خارجية لمشاركات محددة، لذا أود أن تكون لها روابط دائمة أيضًا. هل هناك أي سبب لعدم تعيينها على “true”؛ على سبيل المثال، الأداء أو شيء من هذا القبيل؟
  2. هل البادئة “forum” مقبولة بدون علامات اقتباس فردية، أم يجب اقتباسها كما في التعليق؟
إعجابَين (2)

سيؤدي ذلك إلى إبطاء الاستيراد قليلاً، ولكن لا داعي للقلق بشأن ذلك. يتم تعطيله في الغالب افتراضيًا لأنه نادرًا ما يكون مطلوبًا.

نعم، هذا جيد.

إعجابَين (2)

لقد واجهت عقبة أثناء التحضير لهذا الاستيراد.
منتدى phpBB الذي أخطط لترحيله يستخدم BBcode مخصصًا ينشئ علامات img HTML للصور المخزنة في مجلدات حسب السنة في دليل خارج phpBB، ولكن ضمن نفس حساب المستخدم على الخادم. يأخذ BBcode التنسيق التالي:

[Gallery]{NUMBER1}|{NUMBER2}|{NUMBER3}|{SIMPLETEXT}[/Gallery]

يمثل {NUMBER1} و {NUMBER2} أعدادًا صحيحة لعرض وارتفاع الصورة على التوالي. يمثل {NUMBER3} عددًا صحيحًا لمجلد السنة الذي توجد فيه الصورة، ويمثل {SIMPLETEXT} اسم ملف الصورة. يبدو استبدال HTML لـ BBcode كالتالي:

<img class="postimage gallery-image" src="/gallery/files/{NUMBER3}/{SIMPLETEXT}" width="{NUMBER1}" height="{NUMBER2}" />

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

لقد ألقيت نظرة على Ruby-BBcode-to-MD، والذي يقول إنه “يسمح بتوسيع هذه المجموعة بسهولة بعلامات مخصصة عن طريق تحرير tags.rb”. ألقيت نظرة على tags.rb، ولكن نظرًا لأن هذه هي المرة الأولى التي أنظر فيها إلى كود Ruby، فأنا في حيرة من أمري بشأن كيفية التعامل مع BBcode المخصص الخاص بي نظرًا لأن تنسيقه المفصول بعلامة الأنبوب يختلف عن أي من BBcodes الرسمية التي يتضمنها ملف tags.rb والتي ربما استخدمتها كدليل.

ليس لدي templates/import/phpbb3.template.yml محملًا بعد، لذلك أخمن أن هذا سيضيف جوهرة Ruby BBcode إلى MD؟

لذا لدي أسئلة:

  1. ما هي أفضل طريقة للتعامل مع هذا BBcode المخصص للترحيل؟ هل تحرير ملف tags.rb هو الحل؟ (إذا كان الأمر كذلك، فسأقوم ببعض الأبحاث حول برمجة Ruby وربما التعبيرات العادية بعد ذلك، ولكن أي تلميحات ستكون موضع ترحيب!)
  2. ما هو أفضل مكان لوضع ملفات الصور لهذه المعرض في شجرة ملفات الاستيراد بحيث يتم حفظها في Discourse وتظهر في المشاركات المستوردة؟
إعجاب واحد (1)

لم يعد هذا الـ gem مستخدمًا حقًا. من أي إصدار من phpBB تقوم بالاستيراد؟ إذا كان الإصدار v3.1 أو أقل، فستحتاج إلى تطبيق بعض السحر باستخدام التعبيرات النمطية (regex) في discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub.

بالنسبة للإصدار v3.2، يمكنك إضافة معالجة BBCode في discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub

إعجابَين (2)