Mac 上的特殊 Symfony2 缓存文件权限问题
Special Symfony2 cache file permission issue on Mac
我已经阅读了有关 symfony 和权限问题的多个问题。
我的问题是:
当cache:clear 创建目录时,apache 无法访问缓存。
当 apache 在页面调用上创建目录时,cache:clear 无法访问。
有趣的是它只发生在一个项目中(我从一个客户那里得到的)。
在所有其他情况下,它从两侧起作用。所以有权限的东西似乎是错误的。
首先,我删除了 app/cache 中的所有文件夹。
然后我设置了一个sudo chmod -R 777 app/cache
.
我们现在应该有一个干净的开始。
测试 1
现在我运行app/devcache:clear。将创建文件夹 dev 和 prod。
我看一下dev文件夹的权限:
crismancich (me) - Custom
_www - Custom
crismancich (me) - Read & Write
wheel - Read only
everyone - Read only
因此 apache 将无法写入缓存。
测试 2
现在我试试另一个方向。我再次通过 sudo rm -r app/cache/*
删除子文件夹并设置 sudo chmod -R 777 app/cache
.
然后我就通过浏览器调用该网站。开发目录已创建。权限如下:
crismancich (me) - Custom
_www - Custom
_www - Read & Write
wheel - Read only
everyone - read only
现在 apache 可以访问这些文件了。但是当我使用 app/console cache:clear
时,我得到一个...
`[RuntimeException] 发布
无法写入缓存目录 (/Workspace/ACME_Compliance_Tool_HE
AD/ComplianceTool/app/cache/dev)
附加测试
当我从这里继续并再次触发递归 chmod 时,app/console cache:clear
至少开始了,但遇到了更深层次的错误...
[Symfony\Component\Filesystem\Exception\IOException]<br>
无法删除文件 /Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/<br>
app/cache/dev_old/profiler/81/27/ba2781
其实没有app/cache/dev_old
。我猜 cache:clear 会先重命名然后删除目录。看起来重命名不起作用并且未处理此错误。
如果我使用 sudo app/console cache:clear
,它会工作,但是 apache 再次无法访问这些文件并给我留下一个空白页面和错误:
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Failed to write cache file "/Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/app/cache/dev/classes.php".' in /Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/vendor/symfony/symfony/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php:205
使用 finder 中的文件信息对话框并为 _www 授予读取和写入缓存或 dev 以及所有子文件夹或来自“/Workspace/ACME_Compliance_Tool_HEAD”的整个文件夹结构根本没有效果。
一个sudo chmod -R 777 app/cache
让apache再次创建缓存文件,但是话又说回来,cache:clear不能删除apache创建的文件。
结果
每次我必须使用 create/change/delete 文件的控制台命令时,我都以 chmodding 结束。到时候就很烦了。
我的问题
为什么它适用于不同的项目?问题出在哪里?
没找到原因,但是找到了解决办法:
我压缩了文件并将它们解压缩到一个新目录。这样我似乎已经摆脱了权限问题。
我已经阅读了有关 symfony 和权限问题的多个问题。
我的问题是: 当cache:clear 创建目录时,apache 无法访问缓存。 当 apache 在页面调用上创建目录时,cache:clear 无法访问。
有趣的是它只发生在一个项目中(我从一个客户那里得到的)。 在所有其他情况下,它从两侧起作用。所以有权限的东西似乎是错误的。
首先,我删除了 app/cache 中的所有文件夹。
然后我设置了一个sudo chmod -R 777 app/cache
.
我们现在应该有一个干净的开始。
测试 1
现在我运行app/devcache:clear。将创建文件夹 dev 和 prod。 我看一下dev文件夹的权限:
crismancich (me) - Custom
_www - Custom
crismancich (me) - Read & Write
wheel - Read only
everyone - Read only
因此 apache 将无法写入缓存。
测试 2
现在我试试另一个方向。我再次通过 sudo rm -r app/cache/*
删除子文件夹并设置 sudo chmod -R 777 app/cache
.
然后我就通过浏览器调用该网站。开发目录已创建。权限如下:
crismancich (me) - Custom
_www - Custom
_www - Read & Write
wheel - Read only
everyone - read only
现在 apache 可以访问这些文件了。但是当我使用 app/console cache:clear
时,我得到一个...
`[RuntimeException] 发布
无法写入缓存目录 (/Workspace/ACME_Compliance_Tool_HE
AD/ComplianceTool/app/cache/dev)
附加测试
当我从这里继续并再次触发递归 chmod 时,app/console cache:clear
至少开始了,但遇到了更深层次的错误...
[Symfony\Component\Filesystem\Exception\IOException]<br>
无法删除文件 /Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/<br>
app/cache/dev_old/profiler/81/27/ba2781
其实没有app/cache/dev_old
。我猜 cache:clear 会先重命名然后删除目录。看起来重命名不起作用并且未处理此错误。
如果我使用 sudo app/console cache:clear
,它会工作,但是 apache 再次无法访问这些文件并给我留下一个空白页面和错误:
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Failed to write cache file "/Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/app/cache/dev/classes.php".' in /Workspace/ACME_Compliance_Tool_HEAD/ComplianceTool/vendor/symfony/symfony/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php:205
使用 finder 中的文件信息对话框并为 _www 授予读取和写入缓存或 dev 以及所有子文件夹或来自“/Workspace/ACME_Compliance_Tool_HEAD”的整个文件夹结构根本没有效果。
一个sudo chmod -R 777 app/cache
让apache再次创建缓存文件,但是话又说回来,cache:clear不能删除apache创建的文件。
结果 每次我必须使用 create/change/delete 文件的控制台命令时,我都以 chmodding 结束。到时候就很烦了。
我的问题 为什么它适用于不同的项目?问题出在哪里?
没找到原因,但是找到了解决办法:
我压缩了文件并将它们解压缩到一个新目录。这样我似乎已经摆脱了权限问题。