Înțelegerea actualizărilor și post-actualizărilor pentru actualizări de succes ale site-ului Drupal

Publicat: 2023-04-25

În timpul actualizărilor de bază sau al actualizărilor modulelor, este esențial să asigurați stabilitatea și integritatea site-ului dvs. Drupal. Din fericire, modulul Update API și Update/Post Update Hooks sunt aici pentru a vă ajuta.

Modulul Update API oferă cârligele necesare pentru actualizarea codului și modulelor de pe site-ul dvs. Drupal. Aceste cârlige nu sunt altceva decât cârlige de actualizare și post-actualizare care permit dezvoltatorilor să personalizeze actualizările în funcție de nevoile lor.

În acest articol, vom discuta despre API-ul de actualizare, ce sunt cârligele de actualizare și post-actualizare și când și cum ar trebui utilizate. Înțelegând ambele tipuri de cârlige, vă puteți actualiza cu succes site-ul Drupal cu un efort minim. Să începem!

Actualizați și postați cârlige de actualizare

API-ul de actualizare

În timp ce lucrați pe un site existent, atunci când actualizați codul într-un modul, poate fi necesar să actualizați datele stocate, astfel încât datele stocate să fie compatibile cu noul cod. Este posibil să fi observat în fața dvs. erori precum „Site-ul web a întâmpinat o eroare neașteptată”. Înfricoșător nu!? Știu! Aici ne vine în ajutor API-ul de actualizare Drupal.

Dacă actualizarea se află între două versiuni minore ale modulului dvs. în cadrul aceleiași versiuni majore de bază Drupal, puteți utiliza API-ul de actualizare pentru a actualiza datele. Update API vă permite să furnizați cod care realizează o actualizare a datelor stocate ori de câte ori modulul face o modificare a modelului său de date. Modificarea modelului de date se referă la orice modificare care face ca datele stocate pe un site existent să fie incompatibile cu baza de cod actualizată a site-ului respectiv. Aceste modificări ale modelului de date implică:

Actualizarea schemei de configurare

  • Adăugarea/eliminarea/redenumirea unei chei de configurare.
  • Modificarea tipului de date al cheii de configurare.
  • Modificarea valorii implicite așteptate a unei chei de configurare etc.

Actualizarea schemei bazei de date

  • Adăugarea/modificarea/eliminarea unui tabel sau câmp al bazei de date.
  • Mutarea datelor stocate într-un câmp sau tabel diferit.
  • Modificarea formatului datelor stocate etc.

Actualizarea entităților și câmpurilor

  • Adăugarea unui câmp de bază nou la un tip de entitate existent.
  • Actualizarea unui câmp de la un tip învechit la un tip nou etc.

Actualizarea Datelor

  • Manipulați datele stocate pe un site existent.

Lucrul cu cârlige de actualizare

Hook hook_update_N() este folosit pentru a introduce o actualizare între versiunile minore ale unui modul. Aceste cârlige sunt plasate în modulul dumneavoastră în fișierul *.install .

Hook_update_N() este scris sub forma (nume modul)_update_(număr). Aici N cuprinde:

  • 1 sau 2 cifre se referă la compatibilitatea de bază a Drupal (Drupal 8, 9, 10 etc.)
  • Următoarea cifră este pentru versiunea majoră a modulului dvs
  • Ultimele 2 cifre pentru numărare secvențială, începând cu 01

Exemplu:

example_update_9201(): prima actualizare pentru versiunile 9.x-2.x.
Unde „exemplu” este numele modulului, prima cifră se referă la versiunea de bază a Drupal „9”, numărul „2” se referă la versiunea majoră a modulului, iar ultimele două cifre „01” indică prima funcție de actualizare scrisă pentru modul „exemplu”.

Partea numerică a funcției de implementare a cârligului (adică, 9201 în exemplul de mai sus) este stocată în baza de date pentru a ține evidența actualizărilor care au fost deja executate. Deci nu ar trebui să renumerotați niciodată funcțiile de actualizare.
Pentru a cunoaște versiunea curentă a schemei a unui modul „exemplu stocat în baza de date”, utilizați:

drush php-eval "echo drupal_get_installed_schema_version('example');"

versiunea schemei

Pentru a seta manual versiunea curentă a schemei a unui „exemplu” de modul înapoi la „9201”, utilizați:

drush php-eval "echo drupal_set_installed_schema_version('example', '9201');"

configurați manual schema

Notă: Încercați să evitați să utilizați funcția drupal_set_installed_schema_version() pe site-urile de producție, deoarece vă actualizează direct baza de date. Îl puteți folosi în mediile de testare locale sau inferioare în timpul dezvoltării pentru a reseta versiunea schemei.

Adăugați o descriere adecvată în comentariul blocului de document înainte de funcția de actualizare, deoarece va fi tipărită pentru utilizatori în timp ce o rulează.

 Structure of hook_update_N(): /** * A aimple hook_update_N() hook. */ function example_update_9201() { // Code goes here. }

Aceste cârlige sunt executate în ordine sortată, adică example_update_9201() cârligul se execută înainte de example_update_9202(), următorul este 9203, 9204 și așa mai departe.

De asemenea, puteți modifica ordinea sortată a acestor cârlige, introducând dependențe între cârlige. Utilizați hook_update_dependencies() pentru a rula actualizări între două cârlige de actualizare.

Componenta React

Toate cârligele de actualizare sunt executate în lot și acceptă, de asemenea, procesarea în lot a articolelor. Toate cârligele de actualizare au acces la un parametru $sandbox care poate fi folosit pentru a crea procese batch în hook-urile de actualizare pentru a procesa date uriașe simultan, fără a cauza timeout-ul PHP.

Un exemplu simplu de cârlig de actualizare pentru a adăuga o nouă cheie de configurare:

În prezent, fișierul example_module.settings.yml conține:

Setarea modulului

Actualizați cârlig

Pentru a adăuga o nouă „descriere” cheie la configurație:

  • Adăugați cheia „descriere” în fișierul de setări
Descrierea configurației

  • Adăugați update_hook în fișierul example_module.install:
instalați modulul

  • Utilizați drush updb pentru a rula hook.
Implementați actualizarea cârligului

  • Verificați configurația actualizată, noua „descriere” cheie este actualizată.
Descrierea configurației

Lucrul cu cârlige Post Update

Hook hook_post_update_NAME(), similar cu hook-ul de actualizare, este folosit pentru a introduce o actualizare. Dar acest cârlig este destinat în principal să actualizeze datele, cum ar fi entitățile. Aceste hook-uri sunt executate după ce toate hook_update_N() sunt executate. În această etapă, Drupal este deja complet reparat, astfel încât să puteți utiliza orice API din site.

Aceste cârlige sunt plasate într-un fișier *.post_update.php din modulul dumneavoastră.

Hook_post_update_NAME() este scris sub forma (nume modul)_post_update_(orice nume). Aici NUME poate fi orice nume de mașină arbitrar. Această denumire alfanumerică a funcțiilor din fișier este singurul lucru care asigură ordinea de execuție a acestui hook.

Similar cu actualizările hooks, adăugați o descriere adecvată în comentariul docblock înainte de post_update hook. De asemenea, nu reutilizați același nume de cârlig.

Structura hook_post_update_NAME():

 /** * A aimple hook_post_update_NAME() hook. */ function example_post_update_test() { // Code goes here. }

La fel ca în cazul hook-urilor de actualizare, utilizați parametrul $sandbox pentru a indica faptul că API-ul Batch ar trebui să fie utilizat pentru hook-urile dvs. post_update.

Un exemplu simplu despre utilizarea cârligului post-actualizare pentru a actualiza termenul de date:

  • În prezent, toți termenii din vocabularul Etichetelor au un câmp „Exemplu de testare” dezactivat.
Editați termenul
  • Adăugați un cârlig post_update în fișierul example_module.post_update.php pentru a activa câmpul „Exemplu de testare” pentru toți termenii existenți.
post actualizare

  • Utilizați drush updb pentru a rula hook.
drush updb

  • Verificați datele actualizate ale termenului, caseta de selectare „Exemplu de testare” trebuie să fie activată.
date pe termen

Cum să rulezi aceste cârlige!

Puteți folosi comanda Drush pentru a executa aceste cârlige, drush updb. Acesta construiește lotul în următorii pași:

  • Toate cârligele de actualizare sunt descoperite.
  • Rezolvă dependența și sortează ordinea acestora.
  • Cârligele sunt plasate pentru procesarea în lot.
  • În continuare, toate cârligele Post sunt descoperite.
  • Dacă există cârlige post_update și dacă update_hook a rulat anterior, atunci cache-urile sunt șterse.
  • Apoi, împingeți fiecare cârlig post_update în lot.
  • Executați lotul.

Un avantaj major pe care îl are hook-ul post-actualizare față de hook-ul de actualizare este că Drupal este complet funcțional în momentul în care este rulată post-actualizare. Acest lucru permite dezvoltatorilor să folosească orice serviciu Drupal în timp ce folosesc cârligul post-actualizare. Cu ajutorul hook-ului de actualizare, nu trebuie să presupunem că Drupal este complet reparat și să evitați invocarea altor hook-uri, API-uri de entități etc.

Gânduri finale

Când încercați să vă remediați site-ul prin actualizarea config/schema bazei de date, încercați să utilizați cârlige de actualizare. Când vine vorba de manipularea datelor stocate, resalvarea configurațiilor, actualizarea entităților de conținut, ștergerea cache-ului etc., atunci cârligele post-actualizare sunt mai potrivite de utilizat.

Sincer să fiu, nu există o documentație clară pe Drupal.org cu privire la când să folosești ce cârlig! Există o problemă deschisă care solicită îmbunătățirea documentației privind utilizarea acestor două cârlige la care puteți contribui dacă doriți.

Dar, pe baza experienței dezvoltatorilor și luând în considerare modulele de bază Drupal 9 și 10 ca exemplu, utilizați cârlige de actualizare pentru a efectua operațiuni CRUD pe configurații sau baze de date (adică reparați site-ul) și utilizați cârlige post-actualizare pentru entitățile de conținut CRUD ( apoi remediați datele de pe site-ul actualizat), deoarece cârligele post-actualizare sunt rulate după cârligele de actualizare.

Ți-a plăcut să citești acest articol? Arată-ne puțină dragoste și abonează-te astăzi la buletinul nostru informativ săptămânal!