Новое в 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.
Использование каталога сборки для генерации большего количества содержимого
- Pull Request: [FrameworkBundle][HttpKernel] Introduce
$buildDir
argument toWarmableInterface::warmup
to warm read-only artifacts in build_dir #50391 Quentin D.
Функция 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.