【问题标题】:Cache permissions for Symfony2 on Ubuntu14.04Symfony2 在 Ubuntu14.04 上的缓存权限
【发布时间】:2016-02-03 10:19:34
【问题描述】:

从我对 Stack Overflow 的综合搜索来看,这个问题很受欢迎,但没有一个解决方案适用于我的情况。

问题在于全新 Symfony2 安装中文件夹 app/cacheapp/logs 的权限。

我已经尝试过来自 http://symfony.com/doc/current/book/installation.html#configuration-and-setup 的教程,但它对我不起作用。

我在 Ubuntu 14.04 上运行 Apache 2.4.18

当我通过浏览器检查 config.php 文件时,它说我需要更改文件夹 app/cacheapp/ 的权限日志

当前权限状态:

# l app/logs
total 632K
drwxrwxrwx+ 2 www-data www-data 4.0K Feb  3 09:35 ./
drwxrwxr-x+ 7 www-data www-data 4.0K Feb  2 16:11 ../
-rwxrwxrwx+ 1 www-data www-data 617K Feb  3 09:36 dev.log*
-rwxrwxrwx+ 1 www-data www-data    0 Feb  2 09:51 .gitkeep*

# l app/cache
total 12K
drwxrwxrwx+ 2 www-data www-data 4.0K Feb  3 10:02 ./
drwxrwxr-x+ 7 www-data www-data 4.0K Feb  2 16:11 ../
-rwxrwxrwx+ 1 www-data www-data    0 Feb  2 09:51 .gitkeep*

# getfacl app/cache
# file: app/cache
# owner: www-data
# group: www-data
user::rwx
user:root:rwx
user:www-data:rwx
group::r-x
mask::rwx
other::rwx
default:user::rwx
default:user:root:rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

# getfacl app/logs
# file: app/logs
# owner: www-data
# group: www-data
user::rwx
user:root:rwx
user:www-data:rwx
group::r-x
mask::rwx
other::rwx
default:user::rwx
default:user:root:rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

任何帮助将不胜感激。

【问题讨论】:

  • 请问具体的错误信息是什么?
  • 致命错误:未捕获异常“RuntimeException”,消息“无法创建缓存目录 (/var/www/dashboard.dev/app/cache/prod)”
  • 我猜您正在尝试使用http://dashboard.dev/ 而不是http://dashboard.dev/app_dev.php 访问您的网站。试试app_dev.php,看看会发生什么。
  • 如果我尝试使用 app_dev.php 访问,我会得到同样的错误,但格式更好:)。
  • chmod 777 -R app/cache/test

标签: symfony caching apache2.4


【解决方案1】:

显然,由于某种原因,并非所有 Apache 进程都通过 www-data 运行,并且当它试图访问文件时,它们是通过没有写入权限的组 www-data 访问的。

通过使用 acl 包,我只需要添加组 www-data 的权限,它就可以按预期工作。

setfacl -R -m g:www-data:rwX app/logs app/cache
setfacl -dR -m g:www-data:rwX app/logs app/cache

【讨论】:

    【解决方案2】:

    确保您已从项目根目录运行以下命令。 (如果您遵循 symfony 3,路径与说明不同)

    $ HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
    $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache
    $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache
    

    如果您运行的是 Symfony 2.8+,那么您需要将最后两行更改为(以适应较新的目录结构):

    $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
    $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
    

    【讨论】:

    • 你可能从问题中可以看出,我已经为apache用户和运行用户设置了acl权限(是的,我已经以root身份运行命令)。
    • 你确定你没有用var而不是app/cache运行它们吗?
    • 我没有 var 文件夹。
    • 是的,这就是重点。 symfony 指令默认指定 var 文件夹。如果您不使用 2.8+,则必须更改它
    • 我使用的是 Symfony 2.9,但所有 Symfony 2.x 版本的结构都是应用程序中的缓存和日志文件夹,而不是 var。 var 结构在 Symfony 3.0+ 中有效。
    猜你喜欢
    • 2018-05-22
    • 2011-12-12
    • 2013-04-12
    • 2016-04-15
    • 2017-08-17
    • 2013-04-28
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多