Как исправить предупреждения "The following module is missing from the file system..."

Главные вкладки

Studio VIZA 8 октября 2016 в 17:45
4

Если на вашем сайте вы видите предупреждения PHP, такие как "The following module is missing from the file system..." (Модуль отсутствует в файловой системе ..."), (или аналогичные), на этой странице Вы найдете узнаете как это исправить.

http://image.prntscr.com/image/e646aabbb62c4778af95491445d70f38.png

Эти предупреждения были введены начиная с версии Drupal 7.50 и отображаются, когда Drupal пытается найти модуль или тему в файловой системе, но либо не может его найти либо не находит его в установленном месте. Обычно это указывает на наличие проблем с сайтом. Хоть и не серьезных, но, в идеале они должны быть исправлены, по возможности. (Для получения дополнительной информации об этом предупреждении см. эту статью, и инструкцию о том, как избежать предупреждений подобных этому, и никогда не отображать их для конечных пользователей вашего сайта, а только регистрировать в админ-журнале.)

Есть несколько возможных причин, а так же соответствующие решения:

Вы удалили модуль из файловой системы без отключения и деинсталляции

Возможные решения:

  • Восстановление модуля на прежнее место и отключение, с последующим удалением (рекомендуется, если это возможно): Во-первых, восстановите модуль в исходное место в файловой системе. После, необходимо перейти на страницу модулей и отключить/удалить его с помощью инструментов Drupal, или использовать Drush:
             

    drush dis module_name && drush pm-uninstall module_name
             

    Где, module_name должен быть заменен на машинное имя удаляемого модуля.

  • Вручную удалите все следы модуля в базе данных. Это решение не рекомендуется использовать, так как большинство модулей выполняют очистку во время процесса отключения/удаления, и это решение приведет к пропуску этих процессов. Во многих случаях это будет означать, что работа модуля будет нарушена, если попытаться когда-либо его восстановить, для использования на этом сайте. Тем не менее, если вы решили воспользоваться этим решением (например, для устаревших модулей, которые больше не существуют, или которые не могут быть добавлены обратно), вот несколько способов как это можно решить:
    • Drupal 7
      1. Используйте административный интерфейс, предоставляемый модулем Module Missing Message Fixer.
      2. Использование Drush

        Например, выполните команду, подобную следующей:

                 
               
        drush sql-query "DELETE from system where name = 'old_module1' AND type = 'module';"
                 
               

        Когда это сделано, очистите кэш. (например drush cc all).

      3. Напишите update hook в пользовательском модуле

        Вы можете использовать код, подобный приведенному ниже примере, который будет удалять недостающие модули при запуске update.php:

        <?php
              

        /**
              

        * Delete {system} records for long-lost modules.
              

        */
              

        function MYMODULE_update_7100() {
              

        $modules = array(
              

        'old_module1',
              

        'old_module2',
              

        'old_module3',
              

        );
              

        db_delete('system')
              

        ->

        condition('name'$modules'IN')
              

        ->

        condition('type''module')
              

        ->

        execute();
              

        }
              

        ?>
    • Drupal 8
               

      drush sql-query "DELETE FROM key_value WHERE collection='system.schema' AND name='module_name';"
               

      Когда это сделано, необходимо очистить кеш сайта (drush cr) Кроме того, убедитесь, что папка CMI очищена от отключенных модулей. Там же, могут быть некоторые оставшиеся YML файлы, и/или какой-либо конфиг системы. (Все это не лучшие способы, однако в случае с Drupal 8, принимая во внимание новизну, дела идут не совсем так, как планировалось).

    -
    Вы переместили модуль внутри вашей инсталяции Drupal

    -
    Возможные решения:

    • Очистить кеш сайта чтоб зарегистрировать новое положение модуля
    • Вернуть модуль на прежнее место

    Существует ошибка в установленном на вашем сайте модуле

    И наконец вариант, когда на вашем сайте есть код, который сообщает Drupal необходимость поиска несуществующего файла. Это может быть из-за опечатки в коде (например неправильно указанное имя модуля), или потому, что код был добавлен намеренно для проверки несуществующего файла, но не был обновлен в соответствии с этим постом.

    Если это Ваш вариант - нужно попытаться найти код вызывающий проблему (как правило, это код, который вызывается функциями module_load_include(), drupal_get_path(), drupal_get_filename() или их аналоги.

    Источник.

Авторы

Studio VIZA
bumble Dries is not a God!

Комментарии

Аватар пользователя Studio VIZA Studio VIZA 9 октября 2016 в 12:04

dashiwa wrote:

решение в один клик

Bootstrap оптимизатор удаляет эти модули из {системы} таблицы.
StudioVIZA wrote:

Вручную удалите все следы модуля в базе данных. Это решение не рекомендуется использовать, так как большинство модулей выполняют очистку во время процесса отключения/удаления, и это решение приведет к пропуску этих процессов.