صدر تحديث Laravel 13.35 حاملاً معه ميزتين جديدتين مهمتين للمطورين الذين يديرون تطبيقات Laravel على عدة خوادم. تهدف هذه التحسينات إلى تبسيط إدارة المهام المجدولة وضمان سلاسة عمليات النشر، خاصة في البيئات الموزعة التي تتطلب دقة في تنفيذ الأوامر.
تشغيل المهام مرة واحدة فقط على عدة خوادم
من التحديات الشائعة عند تشغيل «schedule:run» على أكثر من خادم هو تكرار تنفيذ المهام المجدولة. فبينما قد يكون هذا مقبولاً لمهام مثل مسح الذاكرة المؤقتة المحلية، فإنه غير مرغوب فيه لمهام مثل إرسال تقارير يومية أو إنشاء فواتير. هنا يأتي دور الدالة الجديدة Schedule::alwaysOnOneServer() التي قدمها Jack Bayliss.
تتيح لك alwaysOnOneServer() تطبيق قيد «الخادم الواحد» على جميع المهام المجدولة في تطبيقك بسهولة، دون الحاجة إلى استدعاء onOneServer() لكل مهمة على حدة. كل ما عليك فعله هو إضافتها في تابع boot() ضمن AppServiceProvider. ومع ذلك، من المهم تذكر تسمية مهام الإغلاق (Closure tasks) باستخدام الدالة name()، وإلا فإنها ستستمر في التشغيل على كل خادم.
لضمان عمل هذه الميزة بشكل صحيح، يجب أن تستخدم جميع الخوادم مخزناً مؤقتاً مشتركاً، مثل Redis أو Memcached أو قاعدة بيانات. إذا كان مخزن التخزين المؤقت الافتراضي لتطبيقك محلياً لكل خادم، فيمكنك تحديد مخزن مشترك لميزة الجدولة فقط باستخدام Schedule::useCache(‘your_shared_store’).
إيقاف الأوامر الطويلة أثناء النشر
ميزة أخرى مهمة في Laravel 13.35 هي القدرة على إيقاف الأوامر المجدولة طويلة الأمد بأمان أثناء عملية النشر. في السابق، كانت الأوامر التي تعمل في الخلفية عبر runInBackground() تستمر في التشغيل حتى الاكتمال أو الإيقاف القسري، حتى لو تم تشغيل php artisan schedule:interrupt.
بفضل مساهمة cyppe، يقوم schedule:interrupt الآن بتخزين وقت المقاطعة، مما يتيح للأوامر طويلة الأمد التحقق من هذا الوقت بشكل دوري باستخدام Schedule::hasBeenInterruptedSince($startedAt) والتوقف بأمان بين الدفعات أو العمليات الفرعية. هذا يمنح المطورين تحكماً أكبر في دورة حياة الأوامر المجدولة ويضمن عدم إيقافها بشكل مفاجئ. تتطلب هذه الميزة أيضاً أن يكون مخزن التخزين المؤقت الافتراضي مشتركاً بين جميع الخوادم.
**ماذا يعني هذا للمطورين؟**
برأينا، هذه الميزات الجديدة في Laravel 13.35 تعد تحسيناً كبيراً للمطورين الذين يتعاملون مع تطبيقات Laravel في بيئات الإنتاج المعقدة. ستقلل alwaysOnOneServer() من الأخطاء البشرية وتكرار المهام غير المرغوب فيه، بينما ستوفر hasBeenInterruptedSince() طريقة أنظف وأكثر أماناً لإدارة النشر دون التأثير على المهام الجارية. يجب على المطورين الذين يستخدمون إعدادات متعددة الخوادم التفكير جدياً في تحديث تطبيقاتهم للاستفادة من هذه الأدوات الجديدة وتحسين استقرار أنظمتهم.
المصدر: laravel-news.com