Ответ 1
Некоторые предварительные объяснения:
- Чтобы повысить производительность вашего веб-сайта, Symfony2 необходимо кэшировать большое количество данных, и это делается путем записи скомпилированных файлов в каталог
app/cache
. - Чтобы предложить мощные средства для отладки и мониторинга, Symfony2 должен отслеживать поведение вашего сайта, и он делает это, записывая файлы трассировки в ваш каталог
app/logs
.
Несколько слов об Apache:
- Apache работает под определенным
user
и конкретнымgroup
(обычноwww-data
для обоих, но вы должны проверить свою установку, чтобы найти используемые. Например, если вы выполняете поиск в/etc/apache2/envvars
в Linux, у вас будут две переменныеAPACHE_RUN_USER=www-data
иAPACHE_RUN_GROUP=www-data
). - Это означает, что когда вы создаете свой сайт на плечах Symfony2 и запускаете его под Apache, каждая запись и чтение выполняются от имени Apache
user
иgroup
.
Анализ ваших проблем:
-
Прежде всего, у вас есть такие ошибки, как:
Change the permissions of the "app/cache/" directory so that the web server can write into it. Change the permissions of the "app/logs/" directory so that the web server can write into it.
потому что ваши папки
app/cache
иapp/logs
недоступны для записи в Apacheuser
иgroup
. -
Во-вторых, выполнив:
sudo chmod +a "_www 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) в папках
app/cache
иapp/logs
, чтобы предоставить некоторые разрешенияwhoami
(в основном вы) и_www
. Этот подход не работает и может иметь два источника:-
Вы изменяете списки ACL, но настроено ли ваше ядро и ваша файловая система для учета ACL?
-
Вы предоставляете некоторые разрешения для
whoami
и_www
, но проверили ли вы, что ваш экземпляр Apache работает под одним из этих пользователей?
-
-
В-третьих, ваши коллеги решают проблему, выполняя:
sudo chmod -R 777 app/cache
Этот подход работает по двум причинам:
- Вы даете все разрешения (чтение и запись) каждому пользователю вашей системы (
777
), поэтому вы уверены, что по крайней мере у вашего пользователя и группы Apache также есть необходимые разрешения для записи вapp/cache
. - Вы делаете это рекурсивно (
-R
), поэтому все вложенные папки, созданные в каталогеapp/cache
, также связаны с новыми разрешениями.
- Вы даете все разрешения (чтение и запись) каждому пользователю вашей системы (
Простое решение:
-
Удалите содержимое ваших папок
app/cache
иapp/logs
:rm -rf app/cache/* rm -rf app/logs/*
-
Предоставьте все разрешения (чтение и запись) в папки
app/cache
иapp/logs
:chmod 777 app/cache chmod 777 app/logs
Примечания:
- Существуют и другие решения (с большим трудом), такие как предоставление разрешения конкретному пользователю и группе Apache и использование ACL для точной настройки.