استعادة إصدار نسخ احتياطي محدد من Discourse

كان لدي منتدى نقاش صغير لبضع سنوات وكان يعمل بشكل جيد. قمت بإعداد النسخ الاحتياطي التلقائي، لكنني لم أقم بتحديث إصدار Discourse لفترة طويلة.

تعطل الخادم، لكن لدي نسخة احتياطية. النسخة الاحتياطية من إصدار Discourse القديم، منذ حوالي عامين. عندما أحاول تثبيت أحدث إصدار واستعادة النسخة الاحتياطية، فإنها لا تعمل. عندما أحاول تثبيت الإصدار القديم، فإنه غير ممكن: يقوم البرنامج النصي للإعداد بسحب التحديثات الجديدة وأحدث صورة Docker تلقائيًا، حتى أنني وجدت هذه الأسطر في البرنامج النصي للمشغل وحذفتها، ولكن بعض التعليمات البرمجية الداخلية في صورة Docker تتحقق أيضًا وتحدث Git إلى أحدث إصدار.

ماذا يجب أن أفعل؟ كيف يمكنني تشغيل إصدار Discourse القديم أو استعادة النسخة الاحتياطية القديمة على الإصدار الجديد؟

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

ما هو الخطأ الذي حصلت عليه عند محاولة الاستعادة؟

لا توجد أخطاء حرجة في مخرجات ./launcher logs app، لكن المنتدى لا يعمل. معظم الأزرار لا تعمل، ولا توجد مواضيع، وHTML يبدو غريباً (الصفحة الرئيسية المعطلة تتكرر ويمكن تمريرها إلى الأسفل بلا حدود).

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

هل يعرف أحد أين يمكنني العثور على سجلات موثوقة؟

هل هناك أي أخطاء في مسار /logs في منتداك؟

المشكلة هي أنني لا أستطيع الوصول إلى /logs - “هذه الصفحة غير موجودة أو خاصة”. ولا يمكنني تسجيل الدخول للتحقق منها.

جرب استخدام تسجيل دخول المسؤول على https://forum.example.com/u/admin-login[1].


  1. تتعلم شيئًا جديدًا كل يوم! ↩︎

شكراً على الرابط، لكنه لن يعمل. يرسل بريدًا إلكترونيًا، لكن ليس لدي خادم smtp وأستخدم هذا المكون الإضافي: Disable Email Verification for Discourse Plugin

ربما تكون هناك بعض أوامر وحدة التحكم على الخادم ممكنة للتحقق مما حدث؟

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

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

لم يكن هناك حل مختلف للسماح للمستخدمين بإنشاء حسابات دون تأكيد البريد الإلكتروني عند إنشاء خادم.

ربما يكون معطلاً الآن، لكنني أحاول على الأقل استعادة الإصدار القديم للمنتدى.

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

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

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

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

هل جربت الوضع الآمن؟

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

لا تحتوي سجلات إنتاج Rails على أخطاء حرجة، وسجل product_errors.log فارغ.

سجلات أخطاء Unicorn OID غير معروف 17246: فشل في التعرف على نوع 'embeddings'. سيتم التعامل معه كسلسلة نصية. فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 2 فشل اشتراك EOFError، إعادة الاتصال خلال ثانية واحدة. مكدس الاستدعاءات /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:103:in `rescue in read' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:94:in `read' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:535:in `next_event' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:66:in `subscription' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:17:in `subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:175:in `_subscription' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/pubsub.rb:17:in `subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:293:in `global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread' فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 خطأ في جلب المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 خطأ في جلب المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 خطأ في جلب المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 خطأ في جلب المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 خطأ في جلب المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 نبضات القلب: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 3 استثناء المهمة: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) sidekiq-exception فشل في الإبلاغ عن الخطأ: رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) 2 رفض الاتصال - connect(2) لـ 127.0.0.1:6379 (redis://localhost:6379) فشل اشتراك، إعادة الاتصال خلال ثانية واحدة. مكدس الاستدعاءات /usr/local/lib/ruby/3.3.0/socket.rb:1219:in `__connect_nonblock' /usr/local/lib/ruby/3.3.0/socket.rb:1219:in `connect_nonblock' /usr/local/lib/ruby/3.3.0/socket.rb:60:in `connect_internal' /usr/local/lib/ruby/3.3.0/socket.rb:141:in `connect' /usr/local/lib/ruby/3.3.0/socket.rb:647:in `block in tcp' /usr/local/lib/ruby/3.3.0/socket.rb:231:in `each' /usr/local/lib/ruby/3.3.0/socket.rb:231:in `foreach' /usr/local/lib/ruby/3.3.0/socket.rb:637:in `tcp' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:120:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/connection_mixin.rb:11:in `reconnect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:769:in `block in connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/middlewares.rb:12:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:768:in `connect' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:759:in `raw_connection' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:719:in `ensure_connected' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:314:in `call_v' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/client.rb:90:in `call_v' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:152:in `block in send_command' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `synchronize' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `send_command' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/strings.rb:191:in `get' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:366:in `process_global_backlog' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:279:in `block in global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:291:in `global_subscribe' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread' OID غير معروف 17246: فشل في التعرف على نوع 'embeddings'. سيتم التعامل معه كسلسلة نصية.

سجلات Sidekiq فارغة.

لا توجد مشاكل في سجلات Nginx.

أرى مشكلة اتصال redis في سجلات Unicord، ولكن سجلات Redis نفسها لا تحتوي على أخطاء:

9706:C 28 Aug 2025 15:11:25.025 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:11:25.106 * Background saving terminated with success 881:M 28 Aug 2025 15:16:26.096 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:16:26.097 * Background saving started by pid 10037 10037:C 28 Aug 2025 15:16:26.109 * DB saved on disk 10037:C 28 Aug 2025 15:16:26.109 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:16:26.198 * Background saving terminated with success 881:M 28 Aug 2025 15:21:27.004 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:21:27.004 * Background saving started by pid 10365 10365:C 28 Aug 2025 15:21:27.019 * DB saved on disk 10365:C 28 Aug 2025 15:21:27.019 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:21:27.105 * Background saving terminated with success 881:M 28 Aug 2025 15:26:28.030 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:26:28.031 * Background saving started by pid 10703 10703:C 28 Aug 2025 15:26:28.050 * DB saved on disk 10703:C 28 Aug 2025 15:26:28.051 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:26:28.132 * Background saving terminated with success 881:M 28 Aug 2025 15:31:29.094 * 100 changes in 300 seconds. Saving... 881:M 28 Aug 2025 15:31:29.095 * Background saving started by pid 11028 11028:C 28 Aug 2025 15:31:29.109 * DB saved on disk 11028:C 28 Aug 2025 15:31:29.110 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB 881:M 28 Aug 2025 15:31:29.196 * Background saving terminated with success

سجلات Postgresql لا تحتوي على أخطاء.

كيف يمكنني تفعيله؟

عذرًا. لقد كتبت “safe-mode” بدلاً من “safe mode” ولم ألاحظ أنها لم تُربط تلقائيًا.

شكرًا، لقد ساعد ذلك والمنتدى يعمل (ليس بشكل صحيح، ولكن يمكنني الوصول إلى المواضيع مع السياق).

ومع ذلك، فإن المنتدى بدون الوضع الآمن غير قابل للاستخدام، ولا أتذكر بالضبط الإضافات التي قمت بتثبيتها. يجب أن تكون قائمة الإضافات في app.yml، ولكن الخادم معطل ولدي فقط نسخة احتياطية، والتي لا تحتوي على app.yml، على حد علمي. ماذا يجب أن أفعل لاستعادة المنتدى وإزالة الإضافات المعطلة؟

لا ينبغي أن يؤدي الاستعادة بدون استخدام ملف app.yml موجود إلى تثبيت أي ملحق باستثناء الملحقات المجمعة (وجميعها رسمية).\n\nومع ذلك، يتم تضمين السمات ومكونات السمات في النسخة الاحتياطية، لذا حاول تعطيلها.\n\nحاول استخدام الوضع الآمن وتعطيل السمات والمكونات فقط للتأكد من أن مشاكلك ناتجة عن أحدها.

إعجابَين (2)

شكرًا، إنه يعمل حقًا فقط بدون سمات، ولكن أين يمكنني العثور على السمات؟ في النسخة الاحتياطية أرى عنصرين فقط: dump.sql.gz ومجلد uploads، الذي يحتوي فقط على وسائط المستخدم وملفاته.

يمكنك الوصول إلى السمات من الواجهة الإدارية. يمكنك أولاً تعطيلها جميعًا ثم تشغيلها واحدة تلو الأخرى (أو أي شيء آخر).

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