Новое в Symfony 6.4: Улучшения каталога сборки

Источник: «New in Symfony 6.4: Build Dir Improvements»
В Symfony 6.4 добавлена поддержка переменной среды APP_BUILD_DIR и обновлены подогреватели кэша для получения параметра build_dir.

В приложениях Symfony опция kernel.build_dir определяет каталог, в котором при компиляции приложения генерируется содержимое, доступное только для чтения. В Symfony 6.4 мы внесли некоторые улучшения, связанные с этим параметром.

Поддержка APP_BUILD_DIR

По умолчанию метод getBuildDir() в классе Symfony Kernel возвращает $this->getCacheDir() из соображений обратной совместимости. В Symfony 6.4 мы улучшили этот метод, проверяя сначала значение переменной среды APP_BUILD_DIR:

public function getBuildDir(): string
{
if (isset($_SERVER['APP_BUILD_DIR'])) {
return $_SERVER['APP_BUILD_DIR'].'/'.$this->environment;
}

return parent::getBuildDir();
}

Эти изменения были добавлены в Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait, используемый в классе App\Kernel, создаваемом по умолчанию в новых приложениях Symfony. Это упростит развёртывание приложений Symfony в файловых системах, доступных только для чтения, таких как контейнеры Docker или AWS Lambda.

Использование каталога сборки для генерации большего количества содержимого

Функция build_dir, вероятно, недостаточно используется в Symfony. По умолчанию в build_dir сбрасывается только скомпилированный контейнер. Все остальные скомпилированные артефакты, доступные только для чтения, сбрасываются в cache_dir: кэш маршрутизатора, прокси-классы Doctrine, классы Symfony Config, переводы и т.д.

Для улучшения этой ситуации мы вносим изменения в классы подогревающие кэш. Метод warmUp() интерфейса WarmableInterface теперь принимает второй аргумент со значением $buildDir:

 namespace Symfony\Component\HttpKernel\CacheWarmer;

interface WarmableInterface
{
- public function warmUp(string $cacheDir): array;
+ public function warmUp(string $cacheDir/* , string $buildDir = null */): array;
}

Благодаря этому изменению артефакты, доступные только для чтения, теперь удобнее хранить в build_dir, что является наиболее оптимальным расположением для них. Чтобы сделать изменение обратно совместимым, мы добавили этот аргумент в качестве комментария в 6.4 (и он станет настоящим аргументом в Symfony 7.0).

Это изменение будет вызывать сообщения об устаревании при обновлении ваших приложений до Symfony 6.4. Обязательно добавьте это изменение в свои подогревающие кэш пакеты (и внесите это изменение в сторонние пакеты, используемые в ваших приложениях), чтобы впоследствии можно было перейти на Symfony 7.

Дополнительные материалы

Предыдущая Статья

Переменные среды/окружения в Node.js: Как правильно их установить

Следующая Статья

Начните тестировать Laravel код меньше чем за 5 минут