RuntimeException: 无法创建缓存目录 (/var/www/sonata/app/cache/dev)

Posted

技术标签:

【中文标题】RuntimeException: 无法创建缓存目录 (/var/www/sonata/app/cache/dev)【英文标题】:RuntimeException: Unable to create the cache directory (/var/www/sonata/app/cache/dev) 【发布时间】:2013-12-06 07:56:56 【问题描述】:

我安装了 Sonata 管理包。 安装后我刷新我的页面有缓存问题然后我使用以下命令删除缓存:

rm -rf app/cache app/log

然后我重新创建目录:

mkdir app/cache app/log

但我收到以下错误:

运行时异常:无法创建缓存目录 (/var/www/sonata/app/cache/dev)。

【问题讨论】:

【参考方案1】:

看起来像是文件/目录权限问题。该目录必须可由网络服务器写入。创建目录后,您应该使用

调整权限
chown -R www-data:www-data app/cache
chown -R www-data:www-data app/log

或者对于 Symfony 4+

chown -R www-data:www-data var

这仅适用于 linux 系统。用户和组取决于您的分配。在 DebianUbuntu 上应该是 www-data,在 CentOS 上是 afaik apache

另一种解决方案是不删除整个文件夹,而只删除它们的内容

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

但请小心使用此命令。

【讨论】:

我在 Ubuntu Server 16.04 上遇到了同样的问题,这样做chown -R www-data:www-data var/logs var/cache var/sessions 解决了我的问题,不要忘记清除缓存..【参考方案2】:

对于 centos:

chown -R apache:apache app/cache

如果你是来这里寻求 Symfony 帮助的,如果你删除了整个 app/logs 文件夹,你可能也必须这样做

chown -R apache:apache app/logs

【讨论】:

它有效 Broks :) 谢谢,顺便问一下,你能解释一下什么是 apache:apache 吗?为什么不是当前用户?【参考方案3】:

更改 CHMOD 可能会有所帮助,但如果缓存在开发过程中让您烦恼,您可以将其停用。 导航到您的应用配置文件(位于根目录的 ../app/config/config.yml 中)。滚动到 twig 配置设置(在 twig 下:)并将缓存值(应该指向缓存目录)更改为 false,如下所示:

twig:
    cache:  false

如果您没有看到任何缓存配置条目,只需添加上面的行。

【讨论】:

当然,一旦应用准备好投入生产,您就需要重新激活它【参考方案4】:

可能发生的情况是您正在尝试在 apache/nginx 下创建文件。默认情况下,apache 或 nginx 的 umask 设置为 0022。

发件人:http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

解释八进制umask模式022和002

如前所述,如果不更改默认设置,则使用访问模式 666 创建文件,使用 777 创建目录。在此示例中:

普通用户使用的默认 umask 002。使用此掩码,默认目录权限为 775,默认文件权限为 664。 root 用户的默认 umask 为 022,结果进入默认目录权限为 755,默认文件权限为 644。 对于目录,基本权限是 (rwxrwxrwx) 0777,对于文件,它们是 0666 (rw-rw-rw)。

您需要手动将 umask 设置为 0002,并将其重置为之前的设置,然后才能创建目录。

【讨论】:

【参考方案5】:

我解决了更改用户和文件夹组var/cachevar/logs,然后我清理了缓存:

sudo chown -R www-data:www-data var/logs
sudo chown -R www-data:www-data var/cache

sudo rm -rf var/logs/* var/cache/*

【讨论】:

小心sudo rm -rf /var/logs/* /var/cache/* 你正在删除根缓存!!删除var 之前的斜线 感谢@Vural Acar 的反馈,答案已编辑【参考方案6】:

这个解决方案是正确的:https://***.com/a/20128013/2400373

但有必要更改Symfony3 中的两个命令: 首先你应该在项目的文件夹中:

$ sudo chown -R www-data:www-data var/cache
$ sudo chown -R www-data:www-data var/logs

删除缓存后:

$ sudo rm -rf var/cache/*
$ sudo rm -rf var/logs/* 

问候

【讨论】:

【参考方案7】:

ma​​c 计算机上是:

$ sudo chown -R _www:_www var/cache
$ sudo chown -R _www:_www var/logs

如果以上都对您不起作用,请在您的 php 文件中调用“phpinfo()”并查找“用户/组”值。这是要授予权限的用户组。

【讨论】:

【参考方案8】:

我在使用 PHP symfony 作为错误图片时发现了类似的问题。 运行命令后找到了

php bin/console cache:clear

我通过删除文件夹 /app/var/cache

中的所有内容解决了这个问题

【讨论】:

【参考方案9】:

还要检查路径。就我而言,我有

return dirname(__DIR__) . '../../../../var/cache/

而不是

return dirname(__DIR__) . '/../../../../var/cache/(缺少/

【讨论】:

【参考方案10】:

主要是权限问题。

我已经在 MAC 上使用命令解决了它:$ sudo chmod -R 777 <path/to/cache/directory>

你可以试试:$ sudo chmod -R 777 /var/www/sonata/app/cache

【讨论】:

【参考方案11】:

概括一下,让每个人都可以使用这两个命令可以解决每个人的问题。

sudo chown -R $USER var/cache
sudo chown -R $USER var/logs

更多信息:$USER 会自动替换您的用户名,以便任何人都可以使用。

【讨论】:

【参考方案12】:

我在使用 phpmyadmin 5.1.0 时遇到了这个问题

解决办法是指定tmp目录的完整路径,而不是相对路径。

在配置文件config.inc.php我有:

$cfg['TempDir'] = 'tmp'

我改成:

$cfg['TempDir'] = '/usr/share/phpmyadmin/tmp'

似乎问题与某些允许路径的“匹配”有关。 也许这个解决方案可以外推到使用 twig 的其他软件。

【讨论】:

以上是关于RuntimeException: 无法创建缓存目录 (/var/www/sonata/app/cache/dev)的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeException: 无法创建缓存目录 (/var/www/sonata/app/cache/dev)

UnityPlayerActivity:java.lang.RuntimeException:无法在未调用 Looper.prepare() 的线程内创建处理程序

java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序错误

java.lang.RuntimeException:无法在未调用 Looper.prepare() 的线程内创建处理程序,在 android 中出现运行时错误

Android RuntimeException:无法实例化服务

未捕获的异常'RuntimeException',消息'无法创建目录public / assets // node_modules / font-awesome / fonts