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 ответов:
для хорошего и определенного решения см. на :
настройка разрешения
одной из распространенных проблем при установке Symfony является то, что приложение / кэш и каталоги приложений / журналов должны быть доступны для записи как веб-сервером, так и пользователь командной строки. В системе UNIX, если пользователь веб-сервера отличается от пользователя командной строки, вы можете попробовать один из следующее решение.
- использовать тот же пользователь для CLI и веб-сервера
в средах разработки, это обычная практика, чтобы использовать тот же Пользователь UNIX для CLI и веб-сервера, потому что он избегает любого из эти разрешения возникают при настройке новых проектов. Это может быть сделано путем редактирования конфигурации веб-сервера (например, обычно httpd.conf или apache2.conf для Apache) и установка его пользователя в качестве то же, что и ваш пользователь CLI (например, для Apache, обновите пользователя и группу значения.)
- использование 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
- использование 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".
- без использования 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 не является поточно-ориентированный.
источник : не удалось записать файл кэша " /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