مرحباً، لقد واجهنا مؤخرًا خطأً فادحًا كسر موقعنا بالكامل دون أي طريقة واضحة للخروج منه. لقد جربنا كل شيء بدءًا من إعادة البناء إلى إزالة/إضافة الإضافات دون جدوى. لدينا نسخة احتياطية عاملة من بضعة أشهر، ولكن يبدو أن أي محاولة لإعادة بناء هذا بإصدار أحدث يؤدي إلى تعطل الموقع مباشرةً.
الرسالة الرئيسية التي يتم عرضها هي:
عفوًا
واجه البرنامج الذي يشغل منتدى المناقشة هذا مشكلة غير متوقعة. نعتذر عن الإزعاج.
تم تسجيل معلومات مفصلة حول الخطأ، وتم إنشاء إشعار تلقائي. سنلقي نظرة عليه.
لا يلزم اتخاذ أي إجراء آخر. ومع ذلك، إذا استمرت حالة الخطأ، يمكنك تقديم تفاصيل إضافية، بما في ذلك خطوات لتكرار الخطأ، عن طريق نشر موضوع مناقشة في فئة ملاحظات الموقع.
هذه رسالة خطأ عامة من 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.
لقد جربت كل ما يمكنني التفكير فيه تقريبًا، لم أكن متأكدًا مما إذا كان يجب علي النشر هنا لأنني أشعر أن هذا خطأ عام جدًا بحيث لا يمكن لأي شخص المساعدة، ولكن إذا كان لدى أي شخص أي أفكار حول سبب هذا، فسأكون ممتنًا للمساعدة.
