Laravel 5: laravel.log не удалось открыть: разрешение отклонено
Чтобы остановить вас с самого начала, нет разрешения. /storage рекурсивно chmodded 777
, и вся папка проекта chowned apache: apache
Я даже переименовал файл журнала в...- old и apache создал новый... если у него не было реальных разрешений на запись, ему не разрешили бы его создавать.
Запуск под версией CentOS 6.6 (Final)
Развернутый проект из git, усадьба работает для моего коллеги.
Полная ошибка:
[Mon May 18 10:17:58 2015] [error] [клиент 86.124.208.14] PHP Fatal Ошибка: исключить исключение "UnexpectedValueException" с сообщением 'Поток или файл "/var/www/vhosts/mapper.pavementlayers.com/storage/logs/laravel-2015-05-18.log" не удалось открыть: не удалось открыть поток: Permission denied 'in /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:84\nStack след:\п # 0 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(88): Монолог \Handler\StreamHandler- > запись (Array)\п # 1 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Монолог \Handler\RotatingFileHandler- > запись (Array)\п # 2 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(265): Монолог \Handler\AbstractProcessingHandler- > ручка (Array)\п # 3 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(543): Монолог\Логгер- > addRecord (400, 'exception' Symf... ', Array)\n # 4 /var/www/vhosts/mapper.pavementl в /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 84
Ответы
Ответ 1
Возможно, SElinux не позволяет Apache создавать этот файл.
Чтобы проверить это, вы можете временно отключить SElinux с помощью следующей команды:
setenforce 0
Это будет помещать SElinux в разрешающий режим. Это означает, что вы все еще получаете сообщение об ошибке в файле журнала SElinux, но SElinux не будет блокировать команду.
Чтобы снова активировать SElinux, вы можете ввести:
setenforce 1
Или перезагрузите сервер CentOS.
К сожалению, у меня также были проблемы с Laravel 5 на CentOS, и причиной было SElinux.
Я закончил с diseleling SElinux, и я знаю, что это не правильно, но у меня не было времени, чтобы заставить обоих работать вместе!
Update
Итак, я, наконец, когда-то исследовал это дальше, и я получил SELinux, работая вместе с Laravel 5. Я просто обновляю этот пост для людей, которые могут столкнуться с этой проблемой. Отключение SELinux - это не лучшая стратегия, как указано выше.
Необходимо сделать три вещи:
-
Папки Storage and Bootstrap/Cache должны иметь правильный контекст SELinux. Это может быть достигнуто с помощью следующих команд.
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/storage(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/bootstrap/cache(/.*)?"
-
Контекст SELinux должен применяться в каталогах.
restorecon -Rv "/var/www/<Laravel Site>/storage"
restorecon -Rv "/var/www/<Laravel Site>/bootstrap/cache"
-
Пользователь Apache должен иметь права на создание файлов в обоих каталогах. Это может быть достигнуто с помощью ACL в CentOS 7.
setfacl -R -m u:apache:rwX storage/
setfacl -R -m u:apache:rwX bootstrap/cache/
Последнее, что вам нужно сделать, это снова включить SELinux.
Ответ 2
Попробуйте выполнить команды laravel 5
$ php artisan cache:clear
$ sudo chmod -R 777 app/storage
$ composer.phar dump-autoload
Это происходит потому, что у laravel нет разрешений на запись в файл журнала, по крайней мере для моего случая.
Ответ 3
Вы должны убедиться, что существует папка storage
. Если вы развертываете из git, убедитесь, что сама папка storage
отслеживается и создается автоматически.
Ответ 4
Это сработало для меня, Laravel 5.4 и выше
$ sudo chmod -R 755 storage/
$ sudo chown -R www-data storage/
$ sudo chgrp -R www-data storage/
$ php artisan cache:clear
$ php artisan config:cache
$ composer dumpautoload
Не все необходимые шаги.
Ответ 5
ON Laravel 5.7
$ cd/var/www/html/$ php artisan cache: очистить кэш приложений очищен!
Ответ 6
за сентос 7
# ausearch -c 'httpd' --raw | audit2allow -M my-httpd
# semodule -i my-httpd.pp