AWS EB 上的 Symfony - 缓存清除后无法写入缓存目录

Symfony on AWS EB - Unable to write in the cache directory after cache clear

我正在将 Symfony 4.4 应用程序部署到 AWS ElasticBeanstalk 并注意到每次部署后都没有清除缓存。

虽然该应用程序 运行 很好,但对陈旧的缓存进行了处理。

为了解决缓存问题,我添加了以下文件:

/.ebextensions/deploy.config

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

这似乎清除了缓存,但随后它以某种方式更改了权限,因此我在尝试访问该应用程序时遇到了错误。

Fatal error: Uncaught RuntimeException: Unable to write in the cache directory (/var/app/current/var/cache/prod)

为什么 运行 cache:clear 更改权限,有没有办法避免这种情况发生,或者至少以后如何解决,即在 same/another .ebextensions 文件?

这些命令由 root 用户 运行 执行,如 docs 中指定。

The specified commands run as the root user, and are processed in alphabetical order by name. Container commands are run from the staging directory, where your source code is extracted prior to being deployed to the application server. Any changes you make to your source code in the staging directory with a container command will be included when the source is deployed to its final location.

(强调我的)。

重新创建缓存时,新目录归 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 作为成为根用户的机制,并使用 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 的变量。