Symfony на AWS EB - Невозможно записать в каталог кеша после очистки кеша

Я развертываю приложение Symfony 4.4 в AWS ElasticBeanstalk и заметил, что кеш не очищается после каждого развертывания.

Однако приложение работало нормально, исключение было сделано для устаревшего кеша.

Чтобы решить проблему с кешем, я добавил следующий файл:

/.ebextensions/deploy.config

container_commands:
    01-clear-cache:
        command: php bin/console cache:clear --no-warmup --env=prod

Кажется, это очищает кеш, но затем каким-то образом меняет разрешения, поэтому я получаю сообщение об ошибке при попытке доступа к приложению.

Неустранимая ошибка: Uncaught RuntimeException: невозможно записать в каталог кеша (/var/app/current/var/cache/prod)

Почему бег cache:clear изменяет разрешения и есть ли способ избежать этого, или, по крайней мере, как разрешить впоследствии, то есть в том же / другом .ebextensions файл?

2 ответа

Решение

Эти команды выполняются rootuser, как указано в docs.

Указанные команды выполняются от имени пользователя root и обрабатываются в алфавитном порядке по имени. Команды контейнера запускаются из промежуточного каталога, где ваш исходный код извлекается перед развертыванием на сервере приложений. Любые изменения, которые вы вносите в исходный код в промежуточном каталоге с помощью команды контейнера, будут включены при развертывании источника в его окончательном расположении.

(Акцент мой).

При повторном создании кеша новые каталоги принадлежат root, и ваш PHP-процесс не может писать туда, если это необходимо.

Выполните свою команду, чтобы она выполнялась под тем же пользователем, что и ваша среда выполнения PHP. Например, если он работает подwww-data пользователь:

container_commands:
    01-clear-cache:
        command: sudo -u webapp php bin/console cache:clear --no-warmup --env=prod

При использовании Ansible вы можете просто использовать become: true как механизм, чтобы стать пользователем root и become_user: xxx стать желанным пользователем.

Пример:

---
# roles/app/tasks/main.yml
- name: Run composer install
  become: true
  become_user: ubuntu
  composer:
    command: install
    working_dir: "{{ deploy_path }}"

Обратите внимание, что вам нужно определить переменную с именем deploy_path.

Другие вопросы по тегам