Добавить в начало скрипта:

set -euxo pipefail

Что всё это значит:

set -e

set -e - прекращает выполнение скрипта если команда завершилась ошибкой, выводит в stderr строку с ошибкой. Обойти эту проверку можно добавив в пайплайн к команде true: mycommand | true.

set -u

set -u - прекращает выполнение скрипта, если встретилась несуществующая переменная.

set -x

set -x - выводит выполняемые команды в stdout перед выполненинем.

set -o pipefail

set -o pipefail - прекращает выполнение скрипта, даже если одна из частей пайпа завершилась ошибкой. В этом случае bash-скрипт завершит выполнение, если mycommand вернёт ошибку, не смотря на true в конце пайплайна: mycommand | true.

В контейнере localhost и 127.0.0.1 ведет к самому себе, а не к хосту на котором запущен докер, что логично. Доступиться к хосту можно указав специальное DNS имя:

host.docker.internal

Подключаем компонент:

composer require symfony/cache

Как сделать простой кеш в файлах?

require_once __DIR__ . '/vendor/autoload.php';

// создаём объект для управления кешом в файлах
$cache = new FilesystemAdapter(
    // поддиректория в папке кеша
    'mySubDirectoryName',

    // время жизни кеша по умолчанию
    86400,

    // путь к папке кеша 
    __DIR__ . '/cache'
);

// ключ кеша
$cacheKey = 'testKey1';

// получаем по этому ключу данные из кеша
$value = $cache->get(
    $cacheKey,

    // если актуального кеша нет, то выполнится этот callable: 
    function () {
        // тут мы получаем данные без кеша,
        // и отдаём их в return,
        // после этого данные сохранятся в кеш 
        $value = rand();

        return $value;
    }
);

Есть два места где независимо друг от друга хранятся переговорки:

  1. Инфоблок "Календарь" / "Бронирование переговорных". Каждый раздел это переговорка. Для этих переговорок при создании события в календаре работает бронирование с периодичностью.

  2. Таблица b_calendar_section. Сюда попадают переговорки, которые добавляютя в попапе по кнопке "Настроить список". И у этих переговорок на уровне ядра отключено бронирование с периодичностью - выводится ошибка: "Бронирование переговорной периодическим событием недоступно".

Пофиксить её можно так:

В файле:

local/modules/sprint.migration/lib/versionconfig.php:207

добавить условие:

if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
    $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
}

Код всего блока:

if (empty($values['migration_dir'])) {
    $values['migration_dir'] = Module::getPhpInterfaceDir() . '/migrations';
} elseif (empty($values['migration_dir_absolute'])) {
    if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
        $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
    }
}

Страницы