symfony2: не удалось записать каталог кэша


мне пришлось использовать

app/console cache:clear  command

для решения проблемы при создании объекта.

теперь я не могу загрузить свою домашнюю страницу:

  http://localhost/projet_etienne/web/app_dev.php

он говорит :

RuntimeException: не удалось записать файл кэша " /var/www/projet_etienne/app/cache/dev / classes.РНР."

Я не очень понимаю об этом бизнесе кэша!

в своем app/cache папка, у меня есть dev, a dev_new, a . Это нормально?

the

app/console cache:clear

генерирует кстати a:

[ErrorException] Предупреждение: переименовать(/var / www / projet_etienne / app / cache / dev,/var/www / projet_etien
ne / app / cache / dev_old): Каталог не пуст в /var/www/projet_etienne/vendo
r / symfony / symfony / src/Symfony/Bundle/FrameworkBundle/Command / CacheClearComm
и.php строка 77

пожалуйста, помогите!

8 54

8 ответов:

для хорошего и определенного решения см. на :

настройка разрешения

одной из распространенных проблем при установке Symfony является то, что приложение / кэш и каталоги приложений / журналов должны быть доступны для записи как веб-сервером, так и пользователь командной строки. В системе UNIX, если пользователь веб-сервера отличается от пользователя командной строки, вы можете попробовать один из следующее решение.

  1. использовать тот же пользователь для CLI и веб-сервера

в средах разработки, это обычная практика, чтобы использовать тот же Пользователь UNIX для CLI и веб-сервера, потому что он избегает любого из эти разрешения возникают при настройке новых проектов. Это может быть сделано путем редактирования конфигурации веб-сервера (например, обычно httpd.conf или apache2.conf для Apache) и установка его пользователя в качестве то же, что и ваш пользователь CLI (например, для Apache, обновите пользователя и группу значения.)

  1. использование ACL в системе, которая поддерживает chmod +a

многие системы позволяют использовать команду chmod +a. Попробуйте это в первую очередь, и если вы получаете сообщение об ошибке - попробуйте следующий метод. Это использует команду для попробуйте определить пользователя веб-сервера и установить его как HTTPDUSER:

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

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod +a "$HTTPDUSER 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
  1. использование ACL в системе, которая не поддерживает chmod +a

некоторые системы не поддерживают chmod +a, но поддерживают другую утилиту называется команда setfacl. Возможно, Вам потребуется включить поддержку ACL на вашем разделе и установите setfacl перед его использованием (как в случае с Ubuntu). Этот использует команду, чтобы попытаться определить пользователя веб-сервера и установить его как HTTPDUSER:

$ HTTPDUSER=`ps aux | 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 app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

для Symfony 3 это будет:

$ HTTPDUSER=`ps aux | 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 var/cache var/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs

если этот не сработает, попробуйте добавить опцию "- N".

  1. без использования ACL

если ни один из предыдущих методов не работает для вас, измените umask таким образом, что каталоги кэша и журнала будут доступны для групповой или мировой записи (в зависимости от того, находятся ли пользователь веб-сервера и пользователь командной строки в та же группа или нет). Чтобы достичь этого, поставьте следующую строку на начало приложения / консоли, 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

обратите внимание, что использование ACL рекомендуется, когда у вас есть доступ к ним на вашем сервере потому что изменение umask не является поточно-ориентированный.

http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup

источник : не удалось записать файл кэша " /var/www/myapp/app/cache/dev/classes.php " при очистке кэша

скорее всего это означает, что каталог и / или поддиректории не доступны для записи. Многие забывают о подкаталогах.

Symfony 2

chmod -R 777 app/cache app/logs

структура каталогов Symfony 3

chmod -R 777 var/cache var/logs

Дополнительные Ресурсы

разрешение решение от Symfony (ранее упомянутых).

разрешения решение КПН университета дополнительно включает в себя экран-бросание на установке.

Примечание: Если вы используете структуру каталогов Symfony 3, Замените app/cache и app/logs С var/cache и var/logs.

если папка уже доступна для записи, так что это не проблема.

вы можете просто перейти к /www/projet_etienne/app/cache/ и вручную удалите папки там (dev, dev_new, dev_old).

обязательно сохраните копию этой папки где-нибудь, чтобы вернуть, если это не исправит проблему

Я знаю, что это не так, как это должно быть сделано, но он работал на меня пару раз.

вы, вероятно, прервали clearcache на полпути, и теперь у вас уже есть приложение/cache/dev_old.

попробуйте это (в корне вашего проекта, предполагая, что вы находитесь в среде Unixy, такой как OS X или Linux):

rm -rf app/cache/dev*

может быть, вы забыли изменить разрешения app / cache app / log

Я использую Ubuntu так

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs

надеюсь, что это помогает..

выполнил:

ps aux | grep apache

и есть что-то вроде этого:

root     28147  0.0  5.4 326336 27024 ?        Ss   20:06   0:00 /usr/sbin/apache2 -k start
www-data 28150  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28151  0.0  4.4 329016 22124 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28152  0.1  6.0 331252 30092 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28153  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28154  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28157  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
user     28297  0.0  0.1  15736   924 pts/4    S+   20:12   0:00 grep --color=auto apache

так что мой пользователь без доступа оказался www-data таким образом, я выполнил команды:

sudo chown -R www-data app/cache
sudo chown -R www-data app/logs

и он решил ошибки доступа.

никогда не используйте unsecure 777 для решения конкретных проблем доступа:

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs

я перемещаю весь каталог из моей установки Windows на рабочий сервер unix, и я получил ту же ошибку. Чтобы исправить это, я просто запустил эти две строки в Unix и все начало работать нормально

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

если версия symfony меньше 2.8

sudo chmod -R 777 app/cache/*

если версия symfony больше или равна 3.0

sudo chmod -R 777 var/cache/*