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

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

该应用程序运行良好,但陈旧的缓存异常。

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

/.ebextensions/deploy.config

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

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

致命错误:未捕获的 RuntimeException:无法写入缓存目录 (/var/app/current/var/cache/prod)

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


GCT1015
浏览 96回答 2
2回答

catspeake

这些命令由root用户运行,如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.
打开App,查看更多内容
随时随地看视频慕课网APP