عندما يحتوي المنشور على صورة تحتوي على شرطة سفلية في اسم الملف (على سبيل المثال)، فإن كل حفظ للمنشور يضاعف علامات السلاش العكسي قبل الشرطة السفلية في المحتوى الخام:
- بعد التعديل الأول: ![20260421_140231|…]
- بعد التعديل الثاني: ![20260421\_140231|…]
- بعد التعديل N: ![20260421{2^N}_140231|…]
بعد 17 تعديلًا، تراكمت حقل الخام 131,072 حرف سلاش عكسي (2^17)، مما زاد الحجم من حوالي 8 كيلوبايت إلى حوالي 136 كيلوبايت. هذا يتسبب في النهاية في عدم إمكانية تعديل المنشور — حيث يُبلغ المحرر عن عدد أحرف يتجاوز بكثير الحد الأقصى لطول المنشور (max_post_length) رغم أن المحتوى الظاهر صغير.
خطوات إعادة إنتاج المشكلة:
- قم برفع صورة يحتوي اسم ملفها على شرطة سفلية.
- أدخلها في منشور. يقوم Discourse بتوليد نص بديل مثل 20260421_140231.
- عدّل المنشور واحفظه بشكل متكرر (5-10 مرات كافية لملاحظة النمو).
- افحص المحتوى الخام عبر /posts/{id}.json — يتضاعف عدد السلاش العكسي مع كل حفظ.
السلوك المتوقع: يجب أن يظل المحتوى الخام مستقرًا عبر التعديلات. لا ينبغي إعادة ترميز الشرائط السفلية في النص البديل للصور في كل مرة يتم فيها الحفظ.
السلوك الفعلي: كل حفظ يضاعف عدد السلاش العكسي قبل _ في النص البديل للصور بمقدار 2.
حل مؤقت: قم بتشغيل الأوامر التالية في وحدة تحكم Rails لإزالة السلاش العكسي الزائد وإعادة تشكيل المنشور:
p = Post.find(POST_ID)
p.update_column(:raw, p.raw.gsub(/\+(?=_)/, “”))
p.rebake!
البيئة:
- إصدار Discourse: 2026.4.0-latest
- تم التثبيت عبر إعداد Docker الرسمي ./launcher