فهم خطافات التحديث والنشر لتحديثات الموقع الناجحة
نشرت: 2023-04-25أثناء التحديثات الأساسية أو تحديثات الوحدة ، من الضروري ضمان استقرار وسلامة موقع ويب دروبال الخاص بك. لحسن الحظ ، فإن وحدة تحديث API وخطافات التحديث / النشر موجودة هنا للمساعدة.
توفر وحدة Update API الروابط الضرورية لتحديث التعليمات البرمجية والوحدات النمطية على موقع Drupal الخاص بك. هذه الروابط ليست سوى خطافات التحديث وما بعد التحديث والتي تسمح للمطورين بتخصيص التحديثات وفقًا لاحتياجاتهم.
في هذه المقالة ، سنناقش تحديث API ، وما هي أدوات التحديث وما بعد التحديث ومتى وكيف ينبغي استخدامها. من خلال فهم كلا النوعين من الخطافات ، يمكنك تحديث موقع دروبال الخاص بك بنجاح بأقل جهد. هيا بنا نبدأ!
تحديث API
أثناء العمل في موقع موجود ، عند تحديث التعليمات البرمجية في وحدة نمطية ، قد تحتاج إلى تحديث البيانات المخزنة بحيث تتوافق البيانات المخزنة مع الرمز الجديد. ربما لاحظت ظهور أخطاء مثل وميض "واجه موقع الويب خطأ غير متوقع" أمامك. مخيف أليس كذلك؟ أنا أعرف! هذا هو المكان الذي يأتي فيه تحديث API الخاص بـ Drupal لإنقاذنا.
إذا كان التحديث بين نسختين ثانويتين من الوحدة الخاصة بك في نفس الإصدار الرئيسي من Drupal core ، يمكنك استخدام Update API لتحديث البيانات. يسمح لك Update API بتوفير رمز يقوم بإجراء تحديث للبيانات المخزنة عندما تقوم الوحدة النمطية الخاصة بك بإجراء تغيير على نموذج البيانات الخاص بها. يشير تغيير نموذج البيانات إلى أي تغيير يجعل البيانات المخزنة على موقع موجود غير متوافقة مع قاعدة التعليمات البرمجية المحدثة لهذا الموقع. تتضمن تغييرات نموذج البيانات هذه:
تحديث مخطط التكوين
- إضافة / إزالة / إعادة تسمية مفتاح التكوين.
- تغيير نوع بيانات مفتاح التكوين.
- تغيير القيمة الافتراضية المتوقعة لمفتاح التكوين ، إلخ.
تحديث مخطط قاعدة البيانات
- إضافة / تغيير / إزالة جدول أو حقل قاعدة بيانات.
- نقل البيانات المخزنة إلى حقل أو جدول مختلف.
- تغيير تنسيق البيانات المخزنة ، إلخ.
تحديث الكيانات والحقول
- إضافة حقل أساسي جديد إلى نوع كيان موجود.
- تحديث حقل من نوع قديم إلى نوع جديد ، إلخ.
تحديث البيانات
- معالجة البيانات المخزنة على موقع موجود.
العمل مع خطافات التحديث
يستخدم Hook hook_update_N () لتقديم تحديث بين الإصدارات الثانوية للوحدة. يتم وضع هذه الروابط داخل الوحدة النمطية الخاصة بك في ملف * .install .
يتم كتابة hook_update_N () في شكل (اسم الوحدة النمطية) _update_ (رقم). هنا يتكون N من:
- يشير رقم واحد أو رقمين إلى توافق دروبال الأساسي (دروبال 8 ، 9 ، 10 ، إلخ.)
- الرقم 1 التالي هو لإصدار الإصدار الرئيسي للوحدة الخاصة بك
- آخر رقمين للعد المتسلسل ، بدءًا من 01
مثال:
example_update_9201 (): التحديث الأول لإصدارات 9.x-2.x.
عندما يكون 'example' هو اسم الوحدة ، يشير الرقم الأول إلى إصدار Drupal الأساسي '9' ، ويشير الرقم '2' إلى إصدار الإصدار الرئيسي للوحدة ويشير آخر رقمين '01' إلى وظيفة التحديث الأولى المكتوبة من أجل وحدة "مثال".
يتم تخزين الجزء الرقمي من وظيفة تنفيذ الخطاف (على سبيل المثال ، 9201 في المثال أعلاه) في قاعدة البيانات لتتبع التحديثات التي تم تنفيذها بالفعل. لذلك يجب ألا تعيد ترقيم وظائف التحديث مطلقًا.
لمعرفة إصدار المخطط الحالي لوحدة "نموذج مخزّن في قاعدة بيانات" ، استخدم:
drush php-EVAL "echo drupal_get_installed_schema_version ('example')؛"
لتعيين إصدار المخطط الحالي لوحدة "مثال" يدويًا على "9201" ، استخدم:
drush php-EVAL "echo drupal_set_installed_schema_version ('example'، '9201')؛"
ملاحظة: يرجى محاولة تجنب استخدام وظيفة drupal_set_installed_schema_version () في مواقع الإنتاج حيث تقوم بتحديث قاعدة البيانات الخاصة بك مباشرةً. يمكنك استخدامه في بيئات الاختبار المحلية أو الأقل أثناء التطوير لإعادة تعيين إصدار المخطط.
أضف وصفًا مناسبًا في تعليق كتلة المستند قبل وظيفة ربط التحديث حيث ستتم طباعته للمستخدمين أثناء تشغيله.
Structure of hook_update_N(): /** * A aimple hook_update_N() hook. */ function example_update_9201() { // Code goes here. }
يتم تنفيذ هذه الخطافات بترتيب مرتب ، على سبيل المثال ، example_update_9201 () تنفيذ الخطاف قبل example_update_9202 () ، التالي 9203 ، 9204 وهكذا.
يمكنك أيضًا تغيير الترتيب الفرز لهذه الخطافات ، عن طريق إدخال التبعيات بين الخطافات. استخدم hook_update_dependencies () لتشغيل التحديثات بين اثنين من وصلات التحديث.
يتم تنفيذ جميع خطافات التحديث دفعة واحدة كما أنها تدعم المعالجة المجمعة للعناصر. تتمتع جميع أدوات التحديث بإمكانية الوصول إلى معلمة وضع الحماية $ والتي يمكن استخدامها لإنشاء عمليات مجمعة في خطافات التحديث من أجل معالجة البيانات الضخمة دفعة واحدة دون التسبب في انتهاء مهلة PHP.
مثال بسيط على ربط التحديث لإضافة مفتاح تكوين جديد:
حاليًا ، يحتوي ملف example_module.settings.yml على:
لإضافة "وصف" مفتاح جديد إلى التكوين:
- أضف مفتاح "الوصف" إلى ملف الإعدادات
- أضف update_hook في ملف example_module.install:
- استخدم دوش محدث لتشغيل الخطاف.
- تحقق من التكوين المحدث ، تم تحديث "وصف" المفتاح الجديد.
العمل مع خطافات ما بعد التحديث
يتم استخدام Hook hook_post_update_NAME () ، على غرار أداة ربط التحديث ، لتقديم تحديث. لكن الغرض من هذا الخطاف في الغالب هو تحديث البيانات ، مثل الكيانات. يتم تنفيذ هذه الخطافات بعد تشغيل كل hook_update_N () hooks. في هذه المرحلة ، تم إصلاح دروبال بالكامل بالفعل حتى تتمكن من استخدام أي واجهة برمجة تطبيقات داخل الموقع.
يتم وضع هذه الخطافات في ملف * .post_update.php في الوحدة النمطية الخاصة بك.
يتم كتابة hook_post_update_NAME () في شكل (اسم الوحدة النمطية) _post_update_ (أي اسم). هنا يمكن أن يكون NAME أي اسم آلة تعسفي. هذه التسمية الأبجدية الرقمية للوظائف في الملف هي الشيء الوحيد الذي يضمن ترتيب تنفيذ هذا الخطاف.
على غرار خطافات التحديث ، أضف وصفًا مناسبًا في تعليق docblock قبل خطاف post_update. أيضًا ، لا تعيد استخدام نفس اسم موضع الإضافة.
هيكل hook_post_update_NAME ():
/** * A aimple hook_post_update_NAME() hook. */ function example_post_update_test() { // Code goes here. }
تمامًا كما هو الحال مع أدوات التحديث ، استخدم المعلمة $ sandbox للإشارة إلى أنه يجب استخدام Batch API لخطافات post_update.
مثال بسيط على استخدام خطاف ما بعد التحديث لتحديث بيانات المصطلح:
- حاليًا ، تحتوي جميع المصطلحات الموجودة ضمن مفردات العلامات على حقل "مثال اختبار" معطل.
- أضف رابط post_update في ملف example_module.post_update.php لتمكين حقل "مثال الاختبار" لجميع المصطلحات الحالية.
- استخدم دوش محدث لتشغيل الخطاف.
- تحقق من بيانات المصطلح المحدثة ، يجب تمكين مربع الاختيار "مثال اختبار".
كيفية تشغيل هذه الخطافات!
يمكنك استخدام الأمر Drush لتنفيذ هذه الخطافات ، drush updb ، حيث يقوم ببناء الدُفعة في الخطوات التالية:
- تم اكتشاف كل خطافات التحديث.
- يحل التبعية ويرتب ترتيبها.
- يتم وضع الخطافات لمعالجة الدُفعات.
- بعد ذلك ، يتم اكتشاف كل خطافات النشر.
- إذا كان هناك خطافات post_update ، وإذا تم تشغيل update_hook مسبقًا ، فسيتم مسح ذاكرات التخزين المؤقت.
- ثم ادفع كل خطاف post_update في الدفعة.
- قم بتنفيذ الدفعة.
تتمثل إحدى الميزات الرئيسية التي يتمتع بها خطاف ما بعد التحديث على خطاف التحديث في أن دروبال يعمل بكامل طاقته في وقت تشغيل التحديث اللاحق. يسمح هذا للمطورين باستخدام أي خدمات دروبال أثناء استخدام خطاف ما بعد التحديث. باستخدام خطاف التحديث ، يجب على المرء ألا يفترض أن دروبال قد تم إصلاحه بالكامل وتجنب استدعاء الخطافات الأخرى ، وواجهات برمجة تطبيقات الكيان ، وما إلى ذلك.
افكار اخيرة
عند محاولة إصلاح موقعك عن طريق تحديث مخطط التكوين / قاعدة البيانات ، حاول استخدام أدوات التحديث. عندما يتعلق الأمر بمعالجة البيانات المخزنة ، وإعادة حفظ التكوينات ، وتحديث كيانات المحتوى ، ومسح ذاكرة التخزين المؤقت ، وما إلى ذلك ، فإن خطافات ما بعد التحديث تكون أكثر ملاءمة للاستخدام.
لنكون صادقين ، لا توجد وثائق واضحة على Drupal.org فيما يتعلق بموعد استخدام الخطاف! هناك مشكلة مفتوحة تطلب تحسين الوثائق المتعلقة باستخدام هذين الخطافين والتي يمكنك المساهمة فيها إذا أردت.
ولكن استنادًا إلى خبرة المطورين وبالنظر إلى وحدات دروبال 9 و 10 الأساسية كمثال ، استخدم خطاطيف التحديث لأداء عمليات CRUD على التكوينات أو قواعد البيانات (أي إصلاح الموقع) واستخدم خطافات ما بعد التحديث لكيانات محتوى CRUD ( ثم إصلاح البيانات على الموقع المحدث) ، حيث يتم تشغيل خطافات ما بعد التحديث بعد خطافات التحديث.
استمتعت بقراءة هذا المقال؟ أظهر لنا بعض الحب واشترك في النشرة الإخبارية الأسبوعية اليوم!