【问题标题】:Symfony 2 cache clearing issueSymfony 2 缓存清除问题
【发布时间】:2013-03-26 17:59:45
【问题描述】:

我的 Symfony 2 网站最近在我尝试清除缓存时出现问题。 我在终端中输入以下命令:

php app/console cache:clear --env=dev

并得到以下错误:

[ErrorException]                                                                                                                                                                                                                                   
 Warning: rename(/var/www/corpsite/corpsite/app/cache/dev,/var/www/corpsite/corpsite/app/cache/dev_old): Directory not empty in /var/www/corpsite/corpsite/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php line 74  

所以我将该文件的权限更改为 777,然后重新运行清除缓存命令,这给了我这个错误:

  [ErrorException]                                                                                                                                                                                                                         
  Warning: unlink(/var/www/corpsite/corpsite/app/cache/dev_old/twig/6b/e9/4491e41b895786689b86f32f446f.php): Permission denied in /var/www/corpsite/corpsite/vendor/symfony/src/Symfony/Component/HttpKernel/Util/Filesystem.php line 100  

我可以通过删除“dev_old”文件夹来解决问题,但我想解决导致问题的问题。

P.S - 我知道该网站正在开发模式下运行。该网站已经运行了 10 个月,以前从未出现过这样的问题。

感谢任何帮助!

【问题讨论】:

  • 删除dev_old文件夹,再次运行命令即可。
  • “我可以通过删除 'dev_old' 文件夹来解决问题,但我想解决导致问题的问题。”
  • 并使用root 运行命令? (或sudo

标签: caching symfony cache-control


【解决方案1】:

您需要获得对缓存和日志文件夹的访问权限。为此,您可以按照此处给出的指示进行操作:http://symfony.com/doc/current/book/installation.html#configuration-and-setup

有几种方法,具体取决于您的操作系统(将 www-data 替换为您的 apache 用户):

如果支持 chmod +a:

$ rm -rf app/cache/*
$ rm -rf app/logs/*

$ sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

否则,如果它支持 setfacl(请参阅https://help.ubuntu.com/community/FilePermissionsACLs):

$ sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs

否则,将这些行放在 app/console、web/app.php 和 web/app_dev.php 的开头(不推荐):

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

【讨论】:

  • 谢谢。删除 app/cache/dev_old 文件夹后,我使用了第二组命令(setfacl),它已经工作了。
  • @hugo-briand,请展开为什么不推荐umask(0002)?安全问题?
  • 从 symfony 安装中给出的指示来看,这种方法不是线程安全的。这意味着如果您可以并行访问您的脚本(例如通过 fpm 或查询 + CLI),您可能会遇到问题。来自 PHP umask doc (php.net/manual/en/function.umask.php):避免在多线程网络服务器中使用此函数。最好在创建文件后使用 chmod() 更改文件权限。使用 umask() 可能会导致并发运行的脚本和网络服务器本身出现意外行为,因为它们都使用相同的 umask。
  • 非常感谢,解决方案 2 让我很开心!
【解决方案2】:

Symfony3 文件夹中,缓存从 app 移动到 var,因此命令将是:

$ rm -rf var/cache/*
$ rm -rf var/logs/*
$ sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var/cache var/logs

【讨论】:

  • 我在 2 年前就停止使用 Symfony 并且不要错过它。它使容易的事情变得困难,使困难的事情变得容易。每个项目都令人头疼。 Symfony3 是什么样的?
【解决方案3】:

您需要获得对缓存和日志文件夹的访问权限。为此,您可以按照此处给出的指示进行操作:

【讨论】:

  • 在哪里? :) 在您发布该链接之前:最好发布链接并且在答案本身中包含相关内容,因为链接可能会变得无效。
猜你喜欢
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2016-10-26
  • 2017-12-21
相关资源
最近更新 更多