Get Social

Ошибка “определения сущности поля” при обновлении Drupal 9

На странице “Отчёт о состоянии” сайта на движке Drupal решил навести порядок, убрать ошибки. Вот одна из них:

Детали статуса

Обнаружены ошибки

Определения сущности/поля
Несоответствие определений сущности и/или поля

В типе сущности и определениях поля обнаружены следующие изменения.

Paragraph
Поле paragraph.field_dvantages_content должно быть обновлено.
Поле paragraph.field_news_carousel должно быть обновлено.
Поле paragraph.field_views_block_content должно быть обновлено.

Не сразу понятно, как устранить эту ошибку, поэтому пришлось опять пользоваться поиском в интернет. Выяснил, что в Drupal есть модуль, который помогает в решении этой задачи. Он называется “Entity Update” и его использование связано с определённым риском. Поэтому не забываем сделать бэкап базы данных.

Итак, установил модуль “Entity Update”:

composer require drupal/entity_update
drush en entity_update -y

попытался выполнить команду

drush upe paragraph

и получил кучу ошибок при выполнении запроса к бд:

SELECT 1 AS expression
FROM paragraph_revision__field_dvantages_content
WHERE (field_dvantages_content_target_id IS NOT NULL)
OR (field_dvantages_content_display_id IS NOT NULL)
OR (field_dvantages_content_argument IS NOT NULL)
OR (field_dvantages_content_title IS NOT NULL)
OR (field_dvantages_content_data IS NOT NULL)
LIMIT 1 OFFSET 0;

Анализ запроса и таблицы paragraph_revision__field_dvantages_content показал, что ошибку вызывают 2 колонки: field_dvantages_content_argument и
field_dvantages_content_title, которых нет в базе.

Создал эти 2 пустые колонки:

ALTER TABLE `your_drupal_db`.paragraph_revision__field_views_block_content ADD field_views_block_content_argument varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci DEFAULT NULL NULL COMMENT 'argument';

ALTER TABLE `your_drupal_db`.paragraph_revision__field_views_block_content ADD field_views_block_content_title varchar(255) CHARACTER SET ascii COLLATE ascii_general_ci DEFAULT NULL NULL COMMENT 'argument';

Потом снова выполняем:

drush upe paragraph

И выясняем, что аналогичная ситуация в с aragraph_revision__field_news_carousel. Поэтому тоже добавляем 2 колонки с _argument и _title. Такие же манипуляции проделываем и с paragraph_revision__field_views_block_content.

После всех этих запросов ошибка “определения сущности поля” исчезает.

Drupal 9 – composer update вызывает ошибку drush php Cannot redeclare

Ставил последние обновления ядра и модулей Drupal 9 с версии 9.3 до 9.5. При этом был получается баг – composer игнорирует настройки json и ставит в папку drupal core в папку vendor, а не туда куда надо. В результате сайт перестает нормально работать и при попытке зайти на любую страницу вызывает редирект в /core/install.php.

В логах получается что-то вроде:

PHP Fatal error:  Cannot redeclare config_get_config_directory() (previously declared in /home/***/public_html/****/core/includes/bootstrap.inc

Что помогло: удаление папки vendor и composer.lock и исправление “composer/installers”: false на true в composer.json

“config”: {
        “sort-packages”: true,
         “allow-plugins”: {
             “composer/installers”: true,
             “cweagans/composer-patches”: true,
             “drupal/core-composer-scaffold”: true,
             “drupal/core-project-message”: true

После чего переустановил всё командой:

composer install

Hestia CP + Nginx + Php-fpm – исполнение php кода в html

Конечно непонятно зачем и кому это нужно, но бывает, что в статических страничках html нужно исполнять код php (например, мне пришлось столкнуться с такой задачей).
По умолчанию в панели Hestia CP + Nginx + Php-fpm эта функция не работает.

Решение.

Нужно править стандартные шаблоны nginx php-fpm. Для этого заходим в папку шаблонов и делаем копии, например, шаблона default:

cd /usr/local/hestia/data/templates/web/nginx/php-fpm
cp default.tpl default-html2php.tpl
cp default.stpl default-html2php.stpl

затем находим блок, где описывается php и добавляем html (или меняем):

              location ~ [^/]\.php|html(/|$) {
                        try_files $uri =404;
                        include /etc/nginx/fastcgi_params;
                        fastcgi_index index.html;

Затем в панели Hestia переключаем конфиг Nginx (по кнопке Advanced Options и дальше Web Template NGINX)

Тут скорее всего сайт перестанет открываться вообще, напишет Access Denied и в логах [domain].access.log мы увидим код 403. Но вот в логах [domain].error.log появится ошибка вроде:
([domain] – ваш домен сайта)

FastCGI sent in stderr: “Access to the script ‘index.html’ has been denied (see security.limit_extension

Это уже более информативно. Исправить это можно так:

Правим

nano /etc/php/8.2/fpm/pool.d/[domain].com.conf

добавим строчку:

security.limit_extensions = .php .html

перезапускаем php-fpm

/etc/init.d/php8.2-fpm restart

(вместо 8.2 используйте свою версию php)

! не рекомендую править какие-либо общие конфиги, для безопасности

Страницы:12