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