تحديث / إعادة بناء Discourse إلى أحدث إصدار يكسر الموقع بشكل لا رجعة فيه

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

الرسالة الرئيسية التي يتم عرضها هي:

عفوًا
واجه البرنامج الذي يشغل منتدى المناقشة هذا مشكلة غير متوقعة. نعتذر عن الإزعاج.

تم تسجيل معلومات مفصلة حول الخطأ، وتم إنشاء إشعار تلقائي. سنلقي نظرة عليه.

لا يلزم اتخاذ أي إجراء آخر. ومع ذلك، إذا استمرت حالة الخطأ، يمكنك تقديم تفاصيل إضافية، بما في ذلك خطوات لتكرار الخطأ، عن طريق نشر موضوع مناقشة في فئة ملاحظات الموقع.

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

Completed 500 Internal Server Error in 152ms (ActiveRecord: 0.0ms | Allocations: 17980)
ActionView::Template::Error (undefined method `[]' for nil:NilClass)
lib/svg_sprite/svg_sprite.rb:502:in `block in custom_icons'
lib/svg_sprite/svg_sprite.rb:500:in `each'
lib/svg_sprite/svg_sprite.rb:500:in `custom_icons'
lib/svg_sprite/svg_sprite.rb:275:in `block in all_icons'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:268:in `all_icons'
lib/svg_sprite/svg_sprite.rb:337:in `bundle'
lib/svg_sprite/svg_sprite.rb:285:in `block in version'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:284:in `version'
lib/svg_sprite/svg_sprite.rb:290:in `path'
app/helpers/application_helper.rb:586:in `client_side_setup_data'
app/views/layouts/application.html.erb:61
lib/topic_list_responder.rb:13:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:103:in `block (2 levels) in <class:ListController>'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

لذلك، بشكل طبيعي، اعتقدت أنه يمكنني إصلاح المشكلة عن طريق تنفيذ محاولة/التقاط بسيطة في السطر 501 حيث يحدث الخطأ. هذه هي الطريقة المعنية:

  def self.custom_icons(theme_id)
    # Automatically register icons in sprites added via themes or plugins
    icons = []
    custom_svg_sprites(theme_id).each do |item|
      begin
        svg_file = Nokogiri::XML(item[:sprite])
        svg_file.css('symbol').each do |sym|
          icons << sym.attributes['id'].value if sym.attributes['id'].present?
        end
      rescue Exception => e
        puts e
      end
    end
    icons
  end

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

نحن نستخدم الإضافات التالية:

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-follow.git
          - git clone https://github.com/discourse/discourse-user-notes.git

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

الإصدار الأصلي قبل التحديث كان 2.8.0.beta2، نحن الآن على 2.9.0.beta1.

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

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

قد تكون هناك مشكلة في Postgres حيث يحاول postgres الترقية إلى الإصدار 13 من الإصدار 10.

تحقق من السجلات لمعرفة ما إذا كنت ترى أي شيء متعلق بـ postgres

إعجابَين (2)

هل تشير إلى السجلات الموجودة في /shared/standalone/log/rails؟ لأنها لا تذكر شيئًا يتعلق بـ postgres. أما بالنسبة للسجلات الموجودة في /shared/standalone/log/var-log/postgres، ففي وقت الخطأ تقريبًا، 19:51:08، هناك طلب لا يبدو غير عادي. لا توجد أخطاء أو أي شيء يبدو أنه فشل. وحول وقت التحديث، لا أعتقد أن ذلك يتم تسجيله هنا.

هل لديك شيء معين يمكنني البحث عنه؟

تأكد من أن apt-get update | apt-get upgrade محدث
ثم قم بتشغيل ./launcher rebuild app
تحقق من وجود أخطاء أو ابحث في /var/discourse/shared/standalone/log/rails

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

لقد قمت بتحديث كل من apt-get update و apt-get upgrade، وقمت بإعادة بناء كاملة، وللأسف ما زلت أواجه نفس الأخطاء. على حد علمي، لم يتغير شيء.

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

بعض الأسئلة:

  1. هل يكتمل إعادة البناء بدون أخطاء؟
  2. هل حاولت تحميل الموقع عبر الوضع الآمن؟
  3. هل يمكنك مشاركة عنوان URL للموقع حتى نتمكن من إلقاء نظرة؟
إعجاب واحد (1)
  1. نعم، يكتمل إعادة البناء بدون أخطاء.
  2. نعم، ومثلما حدث عندما أصلحت الخطأ المذكور أعلاه، فإنه يقوم بتشغيل الموقع في نوع من “الوضع بدون أيقونات / صور” حيث لا يتم تحميل أي شيء.
  3. نعم ولا، يحتوي الموقع على بعض المحتوى الصريح وسيتعين عليّ أن أسأل حول ما إذا كان الناس مرتاحين لمشاركتي له.

في هذه الأثناء، اكتشفت شيئًا آخر، عند تصفح الموقع في الوضع الآمن، لاحظت أن DiscoTOC يرمي خطأ. عند تعطيله، يعمل الموقع بشكل طبيعي مرة أخرى دون الحاجة إلى الوضع الآمن، ومع ذلك لا تزال الأيقونات / الصور لا يتم تحميلها بشكل صحيح.

جميع الصور ترمي 404 في وحدة التحكم، ومعظم الأيقونات مثل الأيقونة المصغرة ترمي 500.
وبالطبع، كانت جميعها تعمل بشكل جيد من قبل.

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

لإبقاء الجميع على اطلاع، لقد جربت منذ ذلك الحين العديد من الاقتراحات من سلاسل مختلفة، ولكن على سبيل المثال لا الحصر:

لم يساعد أي من الاقتراحات، و rake posts:rebake و rake posts:missing_uploads و rake uploads:recover_from_tombstone لم تنجح، للأسف. لقد تحققت أيضًا من لوحة تحكم sidekiq، لكن ذلك لا يستعيد أي شيء أيضًا.

لأي شخص لديه أي فكرة عن كيفية استعادة الصور المفقودة الآن، سأكون ممتنًا لسماعها.

بعد الكثير من التجربة والخطأ، تمكنت من استعادة الصور بنجاح في النهاية، لذلك سأعتبر هذه المسألة محلولة.

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

هل كان هناك شيء تتمنى لو كنت تعرفه في البداية؟

3 إعجابات

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

4 إعجابات

من الصعب على أي شخص تخمين ذلك! سعيد لأنك اكتشفت الأمر.

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

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم تعد الردود الجديدة مسموح بها.