Zrozumienie haków aktualizacji i postu aktualizacji dla udanych aktualizacji witryny Drupala

Opublikowany: 2023-04-25

Podczas aktualizacji rdzenia lub aktualizacji modułów kluczowe jest zapewnienie stabilności i integralności Twojej witryny Drupal. Na szczęście z pomocą przychodzi moduł Update API i punkty Update/Post Update.

Moduł Update API zapewnia haczyki, które są niezbędne do aktualizacji kodu i modułów w Twojej witrynie Drupal. Te haczyki to nic innego jak haki aktualizacji i po aktualizacji, które pozwalają programistom dostosowywać aktualizacje do ich potrzeb.

W tym artykule omówimy Update API, czym są haki związane z aktualizacją i po aktualizacji oraz kiedy i jak należy ich używać. Rozumiejąc oba rodzaje haków, możesz z powodzeniem zaktualizować swoją witrynę Drupal przy minimalnym wysiłku. Zacznijmy!

Zaktualizuj i opublikuj punkty aktualizacji

Interfejs API aktualizacji

Podczas pracy na istniejącej witrynie, gdy aktualizujesz kod w module, może zaistnieć potrzeba zaktualizowania przechowywanych danych, aby były zgodne z nowym kodem. Być może zauważyłeś błędy takie jak „Witryna napotkała nieoczekiwany błąd” migające przed Tobą. Straszne prawda!? Ja wiem! W tym miejscu z pomocą przychodzi Drupal Update API.

Jeśli aktualizacja dotyczy dwóch mniejszych wersji Twojego modułu w ramach tej samej głównej wersji rdzenia Drupala, możesz użyć Update API do aktualizacji danych. Update API umożliwia udostępnienie kodu, który przeprowadza aktualizację przechowywanych danych za każdym razem, gdy moduł wprowadza zmianę w swoim modelu danych. Zmiana modelu danych odnosi się do każdej zmiany, która powoduje, że dane przechowywane w istniejącej witrynie są niezgodne ze zaktualizowaną bazą kodu tej witryny. Te zmiany modelu danych obejmują:

Aktualizacja schematu konfiguracji

  • Dodawanie/usuwanie/zmiana nazwy klucza konfiguracyjnego.
  • Zmiana typu danych klucza konfiguracyjnego.
  • Zmiana oczekiwanej wartości domyślnej klucza konfiguracyjnego itp.

Aktualizacja schematu bazy danych

  • Dodawanie/zmiana/usuwanie tabeli lub pola bazy danych.
  • Przeniesienie przechowywanych danych do innego pola lub tabeli.
  • Zmiana formatu przechowywanych danych itp.

Aktualizowanie jednostek i pól

  • Dodanie nowego pola podstawowego do istniejącego typu encji.
  • Aktualizowanie pola z przestarzałego typu do nowego typu itp.

Aktualizowanie danych

  • Manipuluj przechowywanymi danymi w istniejącej witrynie.

Praca z hakami aktualizacji

Hook hook_update_N() służy do wprowadzania aktualizacji pomiędzy mniejszymi wersjami modułu. Te zaczepy są umieszczane w twoim module w pliku *.install .

Hook_update_N() jest zapisany w postaci (nazwa modułu)_update_(liczba). Tutaj N obejmuje:

  • 1 lub 2 cyfry odnoszą się do kompatybilności rdzenia Drupala (Drupal 8, 9, 10 itd.)
  • Następna 1 cyfra dotyczy głównej wersji modułu
  • Ostatnie 2 cyfry do liczenia sekwencyjnego, zaczynając od 01

Przykład:

example_update_9201(): Pierwsza aktualizacja dla wersji 9.x-2.x.
Gdzie „przykład” to nazwa modułu, pierwsza cyfra odnosi się do wersji rdzenia Drupala „9”, liczba „2” odnosi się do głównej wersji modułu, a dwie ostatnie cyfry „01” wskazują pierwszą funkcję aktualizacji napisaną dla moduł „przykład”.

Część numeryczna funkcji implementacji haka (tj. 9201 w powyższym przykładzie) jest przechowywana w bazie danych, aby śledzić, które aktualizacje zostały już wykonane. Dlatego nigdy nie należy zmieniać numeracji funkcji aktualizacji.
Aby poznać aktualną wersję schematu modułu „przykład przechowywany w bazie danych”, użyj:

drush php-eval "echo drupal_get_installed_schema_version ('przykład');"

wersja schematu

Aby ręcznie ustawić aktualną wersję schematu modułu „example” z powrotem na „9201”, użyj:

drush php-eval "echo drupal_set_installed_schema_version ('przykład', '9201');"

ręcznie skonfigurować schemat

Uwaga: Staraj się unikać używania funkcji drupal_set_installed_schema_version() na stronach produkcyjnych, ponieważ bezpośrednio aktualizuje ona bazę danych. Możesz go użyć w lokalnych lub niższych środowiskach testowych podczas programowania, aby zresetować wersję schematu.

Dodaj odpowiedni opis w komentarzu bloku dokumentu przed funkcją przechwytywania aktualizacji, ponieważ zostanie on wydrukowany dla użytkowników podczas jej uruchamiania.

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

Te zaczepy są wykonywane w posortowanej kolejności, tj. hook example_update_9201() jest wykonywany przed example_update_9202(), następny jest 9203, 9204 i tak dalej.

Możesz także zmienić posortowaną kolejność tych haków, wprowadzając zależności między hakami. Użyj haka hook_update_dependencies() do uruchamiania aktualizacji między dwoma hakami aktualizacji.

Składnik reakcji

Wszystkie zaczepy aktualizacji są wykonywane wsadowo i obsługują również przetwarzanie wsadowe elementów. Wszystkie haki aktualizacji mają dostęp do parametru $sandbox, którego można użyć do tworzenia procesów wsadowych w hakach aktualizacji w celu jednoczesnego przetwarzania ogromnych danych bez powodowania przekroczenia limitu czasu PHP.

Prosty przykład przechwycenia aktualizacji w celu dodania nowego klucza konfiguracyjnego:

Obecnie plik example_module.settings.yml zawiera:

Ustawienie modułu

Zaktualizuj hak

Aby dodać nowy „opis” klucza do konfiguracji:

  • Dodaj klucz „description” do pliku ustawień
Opis konfiguracji

  • Dodaj update_hook w pliku example_module.install:
zainstalować moduł

  • Użyj drush updb, aby uruchomić hak.
Zaimplementuj aktualizację haka

  • Sprawdź zaktualizowaną konfigurację, nowy klucz „opis” został zaktualizowany.
Opis konfiguracji

Praca z hakami po aktualizacji

Hak hook_post_update_NAME(), podobnie jak hak aktualizacji, służy do wprowadzania aktualizacji. Ale ten hak jest głównie przeznaczony do aktualizacji danych, takich jak encje. Te zaczepy są wykonywane po uruchomieniu wszystkich haków hook_update_N(). Na tym etapie Drupal jest już w pełni naprawiony, więc możesz korzystać z dowolnego API w ramach serwisu.

Te zaczepy są umieszczone w pliku *.post_update.php w Twoim module.

Funkcja hook_post_update_NAME() jest zapisana w postaci (nazwa modułu)_post_update_(dowolna nazwa). Tutaj NAZWA może być dowolną nazwą maszyny. To alfanumeryczne nazewnictwo funkcji w pliku jest jedyną rzeczą, która zapewnia kolejność wykonywania tego haka.

Podobnie jak w przypadku haków aktualizacji, dodaj odpowiedni opis w komentarzu docblock przed hakiem post_update. Nie używaj ponownie tej samej nazwy haka.

Struktura hook_post_update_NAME():

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

Podobnie jak w przypadku haków aktualizacji, użyj parametru $sandbox, aby wskazać, że interfejs API usługi Batch powinien być używany do haków post_update.

Prosty przykład użycia haka post-update do aktualizacji danych terminów:

  • Obecnie wszystkie terminy w słowniku Tagi mają wyłączone pole „Przykład testowy”.
Edytuj termin
  • Dodaj hak post_update w pliku example_module.post_update.php, aby włączyć pole „Przykład testowy” dla wszystkich istniejących warunków.
aktualizacja postu

  • Użyj drush updb, aby uruchomić hak.
drush updb

  • Sprawdź zaktualizowane dane terminów, pole wyboru „Przykład testowy” musi być zaznaczone.
dane terminowe

Jak uruchomić te haki!

Możesz użyć polecenia Drush, aby wykonać te zaczepy, drush updb. Tworzy partię w następujących krokach:

  • Wszystkie zaczepy aktualizacji zostały wykryte.
  • Rozwiązuje zależności i sortuje ich kolejność.
  • Haki są umieszczane do przetwarzania wsadowego.
  • Następnie wykrywane są wszystkie haki Post.
  • Jeśli istnieją punkty zaczepienia post_update i jeśli element update_hook był wcześniej uruchamiany, wówczas pamięci podręczne są czyszczone.
  • Następnie wepchnij każdy hak post_update do partii.
  • Wykonaj partię.

Jedną z głównych zalet haka po aktualizacji w stosunku do haka aktualizacji jest to, że Drupal jest w pełni funkcjonalny w momencie uruchomienia post-aktualizacji. Dzięki temu programiści mogą korzystać z dowolnych usług Drupala podczas korzystania z haka po aktualizacji. W przypadku haka aktualizacji nie należy zakładać, że Drupal jest w pełni naprawiony i unikać wywoływania innych haków, interfejsów API encji itp.

Końcowe przemyślenia

Próbując naprawić witrynę, aktualizując schemat konfiguracji/bazy danych, spróbuj użyć haków aktualizacji. Jeśli chodzi o manipulowanie przechowywanymi danymi, ponowne zapisywanie konfiguracji, aktualizowanie encji treści, czyszczenie pamięci podręcznej itp., Bardziej odpowiednie są haki po aktualizacji.

Szczerze mówiąc, na Drupal.org nie ma jasnej dokumentacji dotyczącej tego, kiedy używać jakiego haka! Istnieje otwarty problem z prośbą o ulepszenie dokumentacji dotyczącej korzystania z tych dwóch haków, do którego możesz się przyczynić, jeśli chcesz.

Ale w oparciu o doświadczenie programistów i patrząc na podstawowe moduły Drupala 9 i 10 jako przykład, użyj haków aktualizacji do wykonywania operacji CRUD na konfiguracjach lub bazach danych (tj. następnie napraw dane w zaktualizowanej witrynie), ponieważ haki po aktualizacji są uruchamiane po hakach aktualizacji.

Podobał Ci się ten artykuł? Okaż nam trochę miłości i zapisz się do naszego cotygodniowego biuletynu już dziś!