1

我正在将 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文件中?

4

2 回答 2

1

这些命令由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
于 2020-03-13T09:38:26.653 回答
0

使用 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.

于 2020-08-25T17:42:48.610 回答