【问题标题】:Symfony prod.log exception /var/cache/prod/annotations is not writableSymfony prod.log 异常 /var/cache/prod/annotations 不可写
【发布时间】:2018-10-22 01:05:15
【问题描述】:

我有基于 symfony 3 的网络。对于部署,我有自己的 bash 脚本。在这个脚本中有一些例程,比如 git pull、清除缓存...

在服务器上是:Debian GNU/Linux 9 (stretch)

但部署后我可以在prod.log 中看到异常:

[2018-05-11 16:55:36] request.CRITICAL:未捕获的 PHP 异常 InvalidArgumentException:“目录“/var/www/domain.com/var/cache/prod/annotations”不可写。”在 /var/www/domain.com/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php 第 92 行 {"exception":"[object] (InvalidArgumentException(code: 0): The directory \" /var/www/domain.com/var/cache/prod/annotations\" 不可写。在 /var/www/domain.com/vendor/doctrine/cache/lib/Doctrine/Common/Cache/FileCache.php: 92)"} []

但问题是 - 在清除缓存之前和之后我有命令 chmod -R 777 /var 并且在部署之后如果我查看 /var/cache/prod/annotations 我看到新文件的更改时间等于我运行清除缓存的时间(通过sh 脚本)。

有人有什么想法吗?在哪里看什么检查?

【问题讨论】:

  • chmod -R 777 /var 我认为更改整个/var 目录的权限是一个糟糕的主意。 ://

标签: php symfony caching deployment permissions


【解决方案1】:

如果您的 shell 先写入app/cache,然后您打开网站,其他部分也应写入该文件夹,则会发生此错误。

简单的解决方案:将您的 shell 用户添加到您的网络服务器使用的组中,可能是 www-data,到 sudo usermod -a -G www-data userName

【讨论】:

    【解决方案2】:

    问题是权限,修复使用这个:

    setfacl -R -m u:www-data:rX folderProject 
    
    setfacl -R -m u:www-data:rwX folderProject/var/cache folderProject/var/logs folderProject/var/sessions folderProject/app/sessions  
    
    setfacl -dR -m u:www-data:rwX folderProject/var/cache folderProject/var/logs folderProject/var/sessions folderProject/app/sessions  
    

    将 folderProject 替换为您的项目名称。 如果您使用 Ubuntu 和 apache,此命令可以解决问题,如果您使用另一个 GNU/Linux,请将用户 www-data 更改为您的用户

    【讨论】:

    • 我收到 -bash: setfacl: command not found 并且 /app/sessions 不存在
    • 你在服务器中使用什么操作系统?
    • 你的项目没有这个文件夹,请删除这部分命令再试一次
    • Debian GNU/Linux 9 (stretch) 是操作系统并且找不到命令 setfacl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2016-12-19
    • 1970-01-01
    • 2015-12-24
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多