Отключаем кеширование Drupal 8 на время разработки

Отключаем кеширование Drupal 8 на время разработки

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

Возможно вам будет интересна статья по установке Drupal 8 с помощью composer.

Итак, если ваша консоль выглядит примерно так:

$ drush cr
Cache rebuild complete.                      [ok]
$ drush cr
Cache rebuild complete.                      [ok]
$ drush cr
Cache rebuild complete.                      [ok]
...

Тогда выполним следующие действия.

Подключаем настройки Drupal для разработки

Вся работа по отключению кеширования Drupal 8 сводится к тому, что мы создадим два файла настроек: для локального окружения и продакшена, и, соответственно, будем переключать их в зависимости от среды.

Первым делом необходимо скопировать и переименовать файл из sites/example.settings.local.php в sites/default/settings.local.php

cp sites/example.settings.local.php sites/default/settings.local.php

Далее откроем файл settings.php по пути sites/default и раскомментируем следующие строки:

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
  include $app_root . '/' . $site_path . '/settings.local.php';
}

Данный код подключает файл настроек для локального окружения.

Откройте файл settings.local.php и раскомментируйте следующую строку:

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';

По умолчанию файл development.services.yml выглядит следующим образом:

services:
  cache.backend.null:
    class: Drupal\Core\Cache\NullBackendFactory

НЕ СОЗДАВАЙТЕ ФАЙЛ DEVELOPMENT.SERVICES.YML, ОН УЖЕ ЛЕЖИТ В ПАПКЕ /SITES

Если вы хотите включить css- и js-агрегацию, то необходимо изменить FALSE на TRUE следующие строки в файле settings.local.php

$config['system.performance']['css']['preprocess'] = FALSE;
$config['system.performance']['js']['preprocess'] = FALSE;

В этом же файле раскомментируйте следующие строки:

$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

Если версия Drupal 8.4 или выше, то добавьте в этот файл следующую строку:

$settings['cache']['bins']['page'] = 'cache.backend.null';

Теперь открываем файл development.services.yml в папке sites и редактируем его следующим образом:

parameters:
  twig.config:
    debug: true
    auto_reload: true
    cache: false

ЕСЛИ В ДАННОМ ФАЙЛЕ УЖЕ ЕСТЬ БЛОК PARAMETERS, ПРОСТО ДОБАВЬТЕ В НЕГО БЛОК TWIG.CONFIG

Теперь очистим кеш и проверим, что после изменения в файлах нам больше нет необходимости повторно очищать кеш. Если вы используете Drush, то это можно сделать командой:

drush cr

Файл development.services.yml должен выглядеть следующим образом:

# Local development services.
#
# To activate this feature, follow the instructions at the top of the
# 'example.settings.local.php' file, which sits next to this file.
parameters:
  http.response.debug_cacheability_headers: true
  twig.config:
    debug: true
    auto_reload: true
    cache: false
services:
  cache.backend.null:
    class: Drupal\Core\Cache\NullBackendFactory

Отключаем кеширование Drupal 8 с помощью Drupal Console

Если вы используете Drupal Console, то перейти в режим разработки можно следующей командой:

drupal site:mode dev

Команда перезапишет services.yml и выведет примерно следующее сообщение:

drupal site:mode dev
 Configuration name: system.performance
 ------------------------- ---------------- ----------------
  Configuration key         Original Value   Override Value
 ------------------------- ---------------- ----------------
  cache.page.use_internal                    false
  css.preprocess            true             false
  css.gzip                  true             false
  js.preprocess             true             false
  js.gzip                   true             false
  response.gzip                              false
 ------------------------- ---------------- ----------------

 Configuration name: views.settings
 -------------------------------- ---------------- ----------------
  Configuration key                Original Value   Override Value
 -------------------------------- ---------------- ----------------
  ui.show.sql_query.enabled        false            true
  ui.show.performance_statistics   false            true
 -------------------------------- ---------------- ----------------

 Configuration name: system.logging
 ------------------- ---------------- ----------------
  Configuration key   Original Value   Override Value
 ------------------- ---------------- ----------------
  error_level         hide             all
 ------------------- ---------------- ----------------


 Services files C:\xampp5628\htdocs\d825/sites/default/services.yml was
 overwritten


 New services settings
 ------------- ------------- -------
  Service       Parameter     Value
 ------------- ------------- -------
  twig.config   auto_reload   true
  twig.config   cache         true
  twig.config   debug         true
 ------------- ------------- -------

 cache:rebuild

 Rebuilding cache(s), wait a moment please.


 [OK] Done clearing cache(s).

На этом всё. Спасибо за внимание!