symfony Ошибка при запуске composer update на localhost-е

Проблема

При развороте проекта на localhost-е ошибка появляется после первого composer install, и в дальнейшем при composer update.

Текст ошибки

В браузере:

Fatal error: Uncaught RuntimeException: Unable to create the storage directory (/var/www/hellosymfony.loc/var/cache/dev/profiler). in /var/www/hellosymfony.loc/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Profiler/FileProfilerStorage.php:45 Stack trace: #0 /var/www/hellosymfony.loc/var/cache/dev/appDevDebugProjectContainer.php(2602): Symfony\Component\HttpKernel\Profiler\FileProfilerStorage->__construct('file:/var/www/h...') #1 /var/www/hellosymfony.loc/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php(336): appDevDebugProjectContainer->getProfilerService() #2 /var/www/hellosymfony.loc/var/cache/dev/appDevDebugProjectContainer.php(2632): Symfony\Component\DependencyInjection\Container->get('profiler') #3 /var/www/hellosymfony.loc/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php(336): appDevDebugProjectContainer->getProfilerListenerService() #4 /var/www/hellosymfony.loc/var/cache/dev/appDevDebugProjectContainer.php(826): Symfony\Component\DependencyInjec in /var/www/hellosymfony.loc/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Profiler/FileProfilerStorage.php on line 45

В консоли во время чистки кэша после при завершении работы композера может быть такая ошибка:

[WARNING] Failed to remove file
"/var/www/vostorg.loc/var/cache/de~/ContainerRz5fepe/getTwig_Command_
DebugService.php":
unlink(/var/www/vostorg.loc/var/cache/dev/ContainerR7b3irx.legacy):
No such file or directory.

При повторном запуске composer update ошибка может быть такой:

Failed to remove file "/var/www/vostorg.loc/var/cache/de~/ContainerRz5fepe/
getTwig_Command_DebugService.php": unlink(/var/www/vostorg.loc/var/cache/de
v/ContainerR7b3irx.legacy): No such file or directory.

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the symfony-scripts event terminated with an exception

[RuntimeException]
An error occurred when executing the "'cache:clear --no-warmup'" command:
In Filesystem.php line 185:

Failed to remove file "/var/www/vostorg.loc/var/cache/de~/ContainerRz5fepe/
getTwig_Command_DebugService.php": unlink(/var/www/vostorg.loc/var/cache/de
v/ContainerR7b3irx.legacy): No such file or directory.

cache:clear [--no-warmup] [--no-optional-warmers] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ans
i] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--]

Решение

Ошибки композера связаны с тем, что при развороте сайта на локальном сервере, Symfony создаёт некоторые файлы в директории var/cache/ без прав записи для группы от имени www-data(www-data - стандартный пользователь, под которым запускается apache). А т.к. композер запускается из консоли под именем вашего рабочего пользователя, для него не достаточно прав - выдаёт ошибку.
Одновременно Symfony, запускаясь из консоли, пишет файлы от имени рабочего пользователя, от которых падает с ошибкой сайт, т.к. www-data не имеет прав на них.


Итак, возможные варианты:

  1. Создать консольную команду, которая будет:
    1. давать права на запись группе www-data (для файлов, которые создаёт symfony в кэше - у некоторых там нет прав)
      sudo chmod -R 775 ../<папка сайта>
    2. затем
       composer update
    3. и снова давать права на запись и делать владельцем всех файлов www-data, чтобы наш сайт мог запускаться apache-ем
      sudo chown -R www-data:www-data <папка сайта> && chmod -R 775 <папка сайта>
  2. Возможно стоит разобраться, как запускать composer от имени www-data или запускать apache от имени вашего пользователя.

PS: Привет, мой любимый композер!
Всем удачной разработки) ♥