حاول إعادة إنتاج المشكلة باستخدام النسخة المحمولة من جوجل كروم أو النسخة المحمولة من فايرفوكس (أو أي متصفح محمول آخر).
مسح الذاكرة المؤقتة حل المشكلة! شكرًا! تعديل: أو ربما لا. ![]()
نعتذر عن الإهمال هنا، فقد كنت مشغولاً بأعمال أخرى. سأقوم بمراجعة هذه الإضافة قريباً.
@DaleKramer @Hifihedgehog إذا كانت لديك مشكلة عاجلة، فأخبرني وسأقوم بمراجعتها هذا الأسبوع.
لقد أعدت إضافة الرسائل السريعة إلى thepavilion.io. هل يمكنك تكرار المشكلة هناك؟
في أحدث الإصدار، الرسائل السريعة لا تعمل بشكل صحيح، وفي كل رسالة تظهر لي هذه الرسالة:
عذرًا، لا يمكنك إنشاء رسالة خاصة في موضوع موجود مسبقًا.
صحيح، أنا أحصل على نفس الخطأ: عذرًا، لا يمكنك إنشاء رسالة خاصة في موضوع موجود.
أحصل على نفس خطأ “لا يمكن إنشاء رسالة خاصة”. هل يمكن أن يكون بسبب هذا التعديل؟
شكرًا على التقارير. سأراجع هذا في أقرب وقت ممكن.
كانت هذه هي المشكلة. الحل هو إعادة كتابة دالة valid؟ دون التغييرات الواردة في هذا الالتزام، لذا في ملف plugin.rb أو ما شابه ذلك قم بـ
require_dependency ‘post_creator’
class ::PostCreator
def valid?
أعد كتابتها هنا مطروحًا منها 4 أسطر
ربما أقوم بإنشاء طلب سحب (PR) لهذا الأمر غدًا إذا لم يقم به شخص آخر، حيث كنت أعمل عليه طوال الصباح.
سيكون ذلك موضع تقدير كبير. الأمور مشغولة جدًا في الوقت الحالي
. شكرًا لك!
في حين أنني سأحبّ جداً الحصول على إصلاح في أقرب وقت ممكن، إلا أنني قلق أيضاً بشأن قابلية استخدام هذا الإصلاح على المدى الطويل. ماذا لو تغيرت المنطق داخل التنفيذ الأساسي لذلك الدالة؟
نعم، أتفق معك، هذه ليست الطريقة الصحيحة للقيام بذلك… خاصة مع وجود دالة valid?، فهذا مجرد انتظار لحدوث ثغرة أمنية… ولا نريد أن يصبح Discourse هو الـ Wordpress التالي من هذه الناحية… لكن ما البديل الجيد؟
لقد كنت أواجه صعوبة مع أمثال هذه الأمور مؤخرًا، حيث توجد دالة طويلة مليئة بالتحقق وأريد تجاوز تحقق واحد فقط، في منتصف الدالة.
لا يمكنك ببساطة التحقق مما إذا كان :create_pm_on_existing_topic هو الخطأ الوحيد لأن الكود يعود فورًا عند تعيينه، وقد يكون فشل في تحقق آخر بعد ذلك أيضًا.
سأقوم على الأقل بإضافة هذا الوحدة (module) في البداية، ثم التحقق مما إذا كانت هذه حالة رسالة سريعة في دالة valid? الجديدة. إذا كانت كذلك، شغّل كود التحقق المعدّل، ولكن إذا لم تكن تتعلق برسالة سريعة، فقط return super بدلاً من ذلك، لاستدعاء الكود الأساسي. عندما تتغير الدالة الأساسية، فإنك ستكسر فقط وظيفة الإضافة (plugin) وليس باقي برنامج المنتدى.
كان عليّ مقارنة الدالتين سطرًا بسطر لأكتشف أن التحقق الذي تم إزالته كان:
if new_topic?
...
else
if @topic.present? && @opts[:archetype] == Archetype.private_message
errors.add(:base, I18n.t(:create_pm_on_existing_topic))
return false
end
...
كان تعليقًا لن يضرّ ![]()
هل يعرف أحد طريقة أفضل لضمان بقاء هذه النوعية من التصحيحات الديناميكية (monkey patches) قابلة للصيانة؟
(هل استخدمت بالفعل مصطلحي “monkey patch” و"قابل للصيانة" في جملة واحدة؟
)
في الواقع، ما زلت غير متأكد من سبب تعطل الرسائل السريعة بسبب [FIX: يضمن عدم محاولة إنشاء رسالة خاصة جديدة في موضوع موجود #9029]؟ هل يعمل إصلاح 9029 للرسائل الخاصة والموضوعات، ثم لماذا تتعطل الرسائل السريعة؟ هل يعود ذلك إلى طريقة محددة تنشر بها الرسائل السريعة رسالة خاصة جديدة تتعارض مع إصلاح 9029؟
نعم، أعتقد أن هذا هو السبب. وقد أضافت #9029 هذا الفحص المحدد.
لقد دفعت للتو إصلاحًا لهذا الإضافة. أخبرني كيف تسير الأمور.
@Oliver_Walker شكرًا لك على طلب السحب (PR). كما ذكر الآخرون، من الأفضل عدم تجاوز الأساليب الكبيرة، لكن شكرًا لك على المحاولة ![]()
وخطرًا من أن أبدو مثل كعكة الحظ القديمة، في 95% من الحالات التي تفكر فيها في تجاوز جزء من أسلوب كبير على جانب الخادم، فأنت تحارب منطق الإطار (قد تكون هناك بعض الاستثناءات القليلة لهذا).
في هذه الحالة، أول ما يجب السؤال عنه هو: كيف تُضاف الرسائل الخاصة العادية إلى مواضيع الرسائل الخاصة العادية الموجودة؟ اتضح أن المشكلة كانت في أن الإضافة كانت تحاول تعيين archetype private_message لكل رسالة، بدلاً من الرسالة الأولى فقط التي تنشئ الموضوع.
شكرًا لك @angus. أفترض أنك تمكنت من اختبار هذا؟ أيضًا، هل عليّ فقط أن أطلب من شريك الاستضافة لدينا (Communiteq (المعروف سابقًا باسم DiscourseHosting)) إعادة تحميل الإضافة لنا؟
