
Uciążliwe, ale stabilne początki CMS Drupal w wersji 8
Strony internetowe na bazie CMS Drupal 8, zacząłem stawiać już po kilku dniach od premiery wersji 8.0.0., która była pierwszym wspieranym wydaniem Drupala 8, którą można było wykorzystać do budowy stron w wersji produkcyjnej. Niestety w pierwszych miesiącach po premierze tej wersji systemu wyszła ogromna ilość aktualizacji rdzenia CMS, jak i jego modułów. Poprawki do Drupala 8 pojawiały się nawet kilka razy w miesiącu, a ich aplikowanie na uruchomionych już stronach stało się dość uciążliwe, jednakże na szczęście, update przebiegał bezkonfliktowo. Niestety stabilny proces aktualizacji miał miejsce do pewnego czasu.
Crash Drupala 8 podczas aktualizacji do wersji 8.4.0
Problem z aktualizacją stron postawionych na D8 pojawił się wraz z wydaniem wersji 8.4.0. w październiku 2017 roku. Komplikacje objawiały się błędem podczas uaktualnienia rdzenia systemu, dotyczyły modułu systemowego i były związane z Update #8400
Failed: Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'revision_created' at row 1: UPDATE {block_content_revision} SET revision_created=:db_update_placeholder_0 WHERE revision_id = :db_condition_placeholder_0; Array ( [:db_update_placeholder_0] => [:db_condition_placeholder_0] => 6 ) in system_update_8400() (line 1942 of /var/www/html/core/modules/system/system.install).
W efekcie, aktualizowana storna internetowa była całkowicie niedostępna (panel administracyjny również), przy próbie wywołania wyświetlał się komunikat o błędach, zaczynający się sformułowaniem:
Wystąpił niespodziewany błąd. Proszę spróbować później. ...
Naprawa Drupala 8 pozwalająca na update do wersji 8.4.0
W pierwszym kroku, bez zastanowienia podjąłem próbę wyczyszczenia cache systemu z poziomu serwera, za pomocą polecenia:
drush cache-rebuild
Niestety zabiegi związane z czyszczeniem cache na nic się nie zdały, problem leżał gdzieś indziej.
Po zapisaniu informacji o błędach i przywróceniu strony z backupu, na spokojnie analizując problem, wywnioskowałem, że dotyczy on rozszerzenia Drupala, pozwalającego na tworzenie własnych bloków, czyli Custom Block. Okazało się, że konflikt powodują pozostałości w bazie danych, po usuniętych blokach własnych. Jedynym ratunkiem było wyczyszczenie tych powiązań. Operację taką można wykonać z poziomu CMS, wchodząc w /admin/modules/uninstall Tam na liście rozszerzeń znalazłem moduł Custom Block, gdzie w opisie widniał zapis:
Następująca przyczyna uniemożliwia odinstalowanie Custom Block:
Istnieje zawartość dla typu encji: Własny blok. Usuń własny blok encji.
Po kliknięciu w "Usuń własny blok encji." zostałem przeniesiony do /admin/modules/uninstall/entity/block_content gdzie przywitał mnie komunikat:
Czy na pewno usunąć wszystkie własny blok encji?
* nawa modułu
*
*
*
* nawa modułu
* nawa modułu
Tego działania nie będzie można wycofać.
Należy wykonać kopię bazy danych jeśli zajdzie potrzeba odzyskania tych elementów.
Trzy puste pozycje na liście bloków, były powiązane z tymi niedoczyszczonymi resztkami po usuniętych własnych blokach, które powodowały wysypanie się Drupala podczas aktualizacji.
Niestety z poziomu PA Drupala nie ma możliwości wyczyszczenia jedynie wybranych pozycji, tylko wszystkich isniejących. Na szczęście bloki, które stworzyłem mogłem odbudować w kilka minut, także w moim przypadku nie stanowiło to problemu.
Po w/w zabiegu, aktualizacja CMS Drupal do wersji 8.4.0 przebiegła bezproblemowo.