أواجه مشكلة في أتمتة من المفترض أن تُفعّل في بداية كل شهر؛ ومع ذلك، وعلى الرغم من أنها مفعّلة، إلا أنها لا تُفعّل تلقائيًا. لا أستطيع العثور على أي سجلات أو طريقة لتصحيح السبب الذي يمنعها من العمل تلقائيًا كما هو متوقع. هل يعرف أحدكم كيف يمكنني حل هذه المشكلة من فضلكم؟
كما ترون في الأسفل، من المفترض أن تقوم الأتمتة بـ “جدولة اجتماع مع نتائج مستكشف البيانات” تلقائيًا كل شهر. إذا نقرت على “تفعيل الآن”، فستعمل كما هو متوقع: سيستلم المستخدمون المضافون إلى القائمة نتائج مستكشف البيانات بالإضافة إلى ملف CSV؛ ومع ذلك، فإن التفعيل التلقائي لا يعمل.
نعم.. لكن المشكلة ليست في عدم تشغيله في التاريخ/الوقت المحدد، بل في أنه لا يعمل على الإطلاق.
أين يمكنني العثور على هذا الزر من فضلك؟
من المفترض أن يرسل رسالة خاصة مباشرة إلى مستخدمين اثنين. وقد تم مشاركة الاستعلام مع المستخدمين. شكرًا على اقتراح الاختبار بتجربة أوقات مختلفة. سأحاول التجربة باستخدام مجموعة تجريبية أيضًا.
أنا أستخدم هذا النص البرمجي للأتمتة بالضبط في عدة أماكن دون أي مشكلة. إليك ما يحتويه ملف الإعدادات الخاص بي في أحد هذه الأماكن - قمت بتغيير التكرار إلى 5 دقائق بدلاً من أسبوع لهذا الاختبار، لكنه يعمل أسبوعيًا كما هو متوقع عند تعيينه كذلك):
ربما جرب إزالة رمز مقابض التحكم من اسم السكربت وعنوان استعلام مستكشف البيانات. قد يكون هذا هو ما يتسبب في فشل الحمولة (رغم أنني أعتقد أنه يجب أن يكون ذلك مقبولاً).
شكرًا على المساعدة! أخشى أن اللغز لم يُحل بعد… وإليك السبب:
قبل «تاريخ التشغيل»، كان الشكل تمامًا كما هو مع الرسالة «سيتم تشغيل الأتمتة التالية في: [التاريخ/الوقت]»؛ ومع ذلك، بعد مرور هذا التاريخ/الوقت دون نجاح التشغيل، لم تعد الرسالة تظهر. أثناء الاختبار، غيّرت التوقيت إلى دقيقة واحدة وعادت رسالة التشغيل للظهور. في شهر سابق لم يتم فيه التشغيل، قمت بتحديث المؤقت وظهرت الرسالة التي تفيد بأنه سيتم التشغيل في الساعة الأولى من الشهر القادم (ولكنه لم يحدث).
في الواقع، عمل الأمر وتم تشغيله في بعض الأشهر بينما لم يحدث ذلك في أشهر أخرى، لذا فإن السبب غير واضح، لكن يبدو الآن أنه لم يعد يُفعّل تلقائيًا على الإطلاق. ما إصدار Discourse الذي تستخدمونه؟ نسختي هي 2026.5.0-latest…
للأسف، حتى عند التشغيل، لا يظهر أي شيء في /logs. (لقد حددت جميع الخيارات).
لا أعتقد أن هذه هي المشكلة لأنني غيّرت وقت التشغيل إلى دقيقة واحدة وتم إرسال الرسالة:
حسناً، لقد كنت أتحدث اليوم مع موين حول هذه الحالة، وأثارت فكرة أن هناك ربما خطأ برمجي عند استخدام التكرار الشهري لأن طول الشهر يختلف؟ بالطبع كانت محقة - إلى حد ما…
على أي حال، قمت ببعض البحث الإضافي
لم أستطع في الواقع العثور على سكريبت الأتمتة الخاص بـ schedule pm with data-explorer results في مجلد plugins/automation/lib/discourse_automation/scripts الأساسي، لذا فهو مختبئ في مكان آخر.
لكنني كنت أراجع المنطق هنا للتكرار (يفترض أن السكريبت يستخدمه) في plugins/automation/lib/discourse_automation/triggers/recurring.rb:
أعتقد أن الكود الأساسي للأتمتة الشهرية المتكررة يحسب اليوم الأسبوعي رقم N بدلاً من تاريخ التقويم الفعلي، وهناك عدم تطابق في المنطق مع Calendar day - حيث أن حقن BYDAY=#{count}#{byday} في قاعدة RRule يجبر الأتمتة على مواءمة اليوم الأسبوعي، وأنه يجب استخدام BYMONTHDAY بدلاً من BYDAY.
لذلك إذا قمت بضبط أتمتة لتبدأ في 15 أبريل (والذي يحدث أن يكون الأربعاء الثالث من أبريل)، فسيفسر النظام القاعدة على النحو التالي: تشغيل في الأربعاء الثالث من كل شهر.
عندما يأتي شهر مايو، يكون الأربعاء الثالث هو 20 مايو، مما يتسبب في انحراف الجدول الزمني بمقدار 5 أيام.
علاوة على ذلك، إذا قمت بضبط أتمتة في اليوم 30 أو 31 من شهر (مثل “الثلاثاء الخامس”)، فسوف يبحث النظام عن الثلاثاء الخامس في الشهر التالي. إذا كان ذلك الشهر يحتوي فقط على 4 أيام ثلاثاء، فإن الأتمتة ستفشل تماماً في العثور على تاريخ صالح وستتخطى الشهر بالكامل بصمت.
لدي إصلاح مُختبر وأقوم بإنشاء طلب دمج (PR) إذا رغب الفريق في الاطلاع عليه. يغير هذا الإصلاح المنطق من “اليوم الأسبوعي رقم N” إلى “تاريخ التقويم الدقيق”.
إليك بعض لقطات الشاشة من اختباراتي وتصحيح الأخطاء:
حالتان، واحدة بدون إصلاح والأخرى مع إصلاح المنطق الخاص بي
قم بإنشاء نفس الأتمتة بالضبط في كلتا الحالتين (الإصدار المُصلح على اليمين):
انظر إلى الاختلافات في اللافتات التي تقول “سيتم تشغيل الأتمتة التالية في:” مع انحراف 5 أيام - الإصدار غير المصحح ينحرف إلى الأربعاء الثالث (20 مايو)، بدلاً من 15 مايو.
على سبيل المثال، قد يتم تخطي الشهور بالكامل إذا كان يبحث عن الخميس الرابع بدلاً من تاريخ فعلي.
يمكنك أيضاً اختبار النتيجة نفسها في وحدة تحكم Rails
تعديل: يبدو أن الخطأ يؤثر على أي سكريبت أتمتة يستخدم محفز recurring مضبوطاً للتشغيل شهرياً.
يمكنني أيضاً تكرار ظهور لافتة فارغة أحياناً، على سبيل المثال إذا قمت بضبط تاريخ البدء ليوم 29 أبريل 2026، فلن يتمكن من العثور على الأربعاء الخامس لشهر مايو لأنه غير موجود - سيفشل تشغيل الأتمتة هنا: (غير المصحح على اليسار، والمصحح على اليمين)
يبدو أن الخطأ يرمي NoMethodError في Rails عندما لا يتمكن من العثور على اليوم رقم N في الأسبوع كما هو موضح أعلاه؛ ومن هنا تأتي اللافتة الفارغة للتشغيل التالي والفشل في التشغيل:
أود فقط الإشارة إلى أنه خطر ببالي أثناء التصحيح أن السلوك الحالي قد يكون مقصودًا (نظرًا لأن اختبارات المواصفات كانت مُهيّأة مع أيام متغيرة). ومع ذلك، أرى أن المدراء الذين يهيئون هذه الأتمتة يتوقعون على الأرجح شهر التقويم وليس اليوم رقم N من الشهر. كما أن تخطي الأشهر في الأتمتة عندما لا يمكن العثور على اليوم رقم N من الشهر يُعد مشكلة.
تعديل: أضفت للتو إصلاحًا لحالة حافة واختبارات مواصفات للحالة التي لا يمكن فيها العثور على تطابق دقيق للتاريخ في الشهر التالي، حيث ينتقل إلى آخر يوم في الشهر (أي: 31 يناير → 28 فبراير). كما تم أخذ السنة الكبيسة في الاعتبار.
شكرًا جزيلاً لك على متابعة هذا الأمر. لا أعرف ما إذا كان إصلاحك قد تم دمجه وما إذا كان سيحل مشكلة التاريخ الشهرية. ومع ذلك، أفترض أنه إذا قمت بتحديث المحفز لكل شهر على حدة، فسيكون ذلك فعالًا، أليس كذلك؟
بمعنى آخر، سأحتاج إلى تحديث المحفز تحديدًا لتلك اليوم المحدد في كل شهر، وسيعمل عندئذٍ. إذا فهمتُ بشكل صحيح، كانت المشكلة عندما يحاول اختيار اليوم تلقائيًا. آمل أن يحل إصلاحك هذه المشكلة… رأيت أن بوت الدفع الجماعي كان يمثل تحديًا لك، لكنني أتمنى أن تسير الأمور على ما يرام. شكرًا مرة أخرى على مساعدتك!
آسف، لم يتم دمج طلب السحب الخاص بي بعد وهو في انتظار مراجعة نهائية من أحد أعضاء الفريق. حتى الآن، يمكنك محاولة تحديث المحفز بتاريخ مختلف، فقط تأكد عند إعداده أن رسالة “المحفز التالي” التي تظهر تعطي تاريخ التشغيل الشهري التالي الصحيح.