Symfony2: не удалось создать каталог кеша
Мне пришлось использовать
app/console cache:clear command
для решения проблемы при создании объекта.
Теперь я не могу загрузить свою домашнюю страницу:
http://localhost/projet_etienne/web/app_dev.php
он говорит:
RuntimeException: Не удалось записать файл кэша "/var/www/projet_etienne/app/cache/dev/classes.php".
Я не очень разбираюсь в этом деле кэша!
В моей папке app/cache
я получил папку dev
, dev_new
, a dev_old
. Это нормально?
app/console cache:clear
генерирует, кстати, a:
[ErrorException] Предупреждение: rename (/var/www/projet_etienne/app/cache/dev,/var/www/projet_etien
ne/app/cache/dev_old): каталог не пуст в /var/www/projet _etienne/vendo
г /Symfony/Symfony/SRC/Symfony/Bundle/FrameworkBundle/Command/CacheClearComm
и .php линия 77
Пожалуйста, помогите!
Ответы
Ответ 1
Для ХОРОШЕГО и определенного решения см. раздел Setting up Permissions
в разделе Installing and Configuring Symfony
:
Настройка разрешений
Одна общая проблема при установке Symfony заключается в том, что приложение/кэш и Каталоги app/logs должны быть доступны для записи как веб-сервером, так и пользователь командной строки. В системе 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 так, чтобы каталоги кеша и журнала будут доступны для записи в группе или для записи во всем мире (в зависимости от того, находятся ли пользователь веб-сервера и пользователь командной строки в та же группа или нет). Чтобы добиться этого, поместите следующую строку в начало файлов 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
Обратите внимание, что использование ACL рекомендуется, когда у вас есть доступ к ним на вашем сервере потому что изменение umask не является потокобезопасным.
http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup
источник :
Не удалось записать файл кэша "/var/www/myapp/app/cache/dev/classes.php" при очистке кеша
Ответ 2
Скорее всего, это означает, что каталог и/или подкаталоги недоступны для записи. Многие забывают о подкаталогах.
Symfony 2
chmod -R 777 app/cache app/logs
Структура каталогов Symfony 3
chmod -R 777 var/cache var/logs
Дополнительные ресурсы
Разрешения для решения Symfony (упоминалось ранее).
Разрешение для решений Университета KPN - дополнительно включает в себя установку экрана при установке.
Примечание. Если вы используете структуру каталогов Symfony 3, замените app/cache
и app/logs
на var/cache
и var/logs
.
Ответ 3
Если папка уже доступна для записи, поэтому это не проблема.
Вы также можете просто перейти к /www/projet_etienne/app/cache/
и вручную удалить папки там (dev, dev_new, dev_old).
Обязательно сохраните копию этой папки где-нибудь, чтобы вернуть ее, если это не устраняет проблему.
Я знаю, что это не так, как должно быть сделано, но это сработало для меня пару раз.
Ответ 4
Вероятно, вы прервали clearcache на полпути, и теперь у вас уже есть приложение /cache/dev _old.
Попробуйте это (в корне вашего проекта, если вы находитесь в среде Unixy, такой как OS X или Linux):
rm -rf app/cache/dev*
Ответ 5
Возможно, вы забыли изменить разрешения приложения/кэша 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
Надеюсь, что это поможет.
Ответ 6
Я перенес весь каталог из моей установки Windows на производственный сервер Unix, и я получил ту же ошибку. Чтобы исправить это, я просто запустил эти две строки в Unix, и все стало работать нормально
rm -rf app/cache/*
rm -rf app/logs/*
Ответ 7
i выполнено:
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
и он решил ошибки доступа.
Никогда не используйте незащищенную 777 для решения конкретных проблем доступа:
sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
Ответ 8
если версия Symfony меньше 2,8
sudo chmod -R 777 app/cache/*
Ответ 9
Просто используйте этот acl cmd, в следующий раз, когда будут созданы файлы внутри var, у него будет разрешение r/w/x для пользователя www-data.
cd var
rm -rf *
cd ..
setfacl -d -m u:www-data:rwx var
Cmd объяснение:
setfacl -> Set acl command
-d -> default behavior
-m -> modify
u:www-data: -> for user
rwx -> adding permissions
var -> on the folder