【问题标题】:Symfony on AWS EB - Unable to write in the cache directory after cache clearAWS EB 上的 Symfony - 缓存清除后无法写入缓存目录
【发布时间】:2020-06-25 06:23:04
【问题描述】:

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

【问题讨论】:

    标签: php symfony amazon-elastic-beanstalk symfony4 symfony-cache


    【解决方案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
    

    【讨论】:

    • 谢谢。碰巧我在 EB 上只有 root 用户。如果有不同的 PHP 运行时用户,我在哪里可以找到它?
    • 试试ec2-user。我不知道哪个用户用于 EB 上的 PHP。您可以检查phpinfo() 的输出并查找USER。但主要的收获是该命令是由 root 运行的,您的 PHP 进程没有权限在之后对这些新目录进行写入。
    • 我创建了一个演示应用,我相信PHP用户是webapp
    • 我可以确认。我确实输出了phpinfo()Configuration-apache2handlerUser/Group => webapp(498)/496 。我再次运行部署,一切都很好。再次感谢!
    【解决方案2】:

    在使用 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 的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 2018-05-27
      • 2012-08-24
      相关资源
      最近更新 更多