«Laravel.log» не открывается: не удалось открыть поток

У меня есть установка Laravel homestead на локальной машине OSX, все, казалось, идет гладко, пока я не попытался открыть example.app:8000 и получил эту ошибку:

Error in exception handler: The stream or file "/home/vagrant/Code/example/app/storage/logs/laravel.log" could not be opened: failed to open stream: Protocol error in /home/vagrant/Code/example/bootstrap/compiled.php:8671 

Я следовал за документами Laravel, а также с Laracast о создании усадьбы, поэтому я не уверен, что бы это вызвало. Я вижу, что /home/vagrant/Code/example/app/storage/logs/laravel.log не существует, но я предполагаю, что это то, что должно быть создано автоматически?

Вам необходимо выполнить одно из следующих действий:

  • sudo chmod -R 644 app/storage
  • sudo chmod -R 755 app/storage

Все файлы и папки в app/storage должны быть доступны для записи вам и групповым www-данным (веб-серверу).

Ошибка в обработчике исключений: поток или файл «laravel / app / storage / logs / laravel.log» не удалось открыть: не удалось открыть поток: разрешение отклонено в laravel / vendor / monolog / monolog / src / Monolog / Handler / StreamHandler .php: 77

Если вы получаете эту ошибку (или аналогичную ошибку) в браузере при доступе к вашему сайту, то www-data не могут записываться в app/storage . Если вы получаете эту ошибку при выполнении определенных команд php artisan , то вы (пользователь) не можете писать в app/storage . Поэтому и вы, и группа www-data должны иметь разрешение на запись.


Чтобы файлы и папки имели правильные разрешения:

  1. Идите в корень вашей установки Laravel (где живут composer.json и artisan ).

  2. Измените владельца и группу, где ваше имя пользователя:

     sudo chown -R yourusername:www-data app/storage 

    Это рекурсивно ( -R ) устанавливает для пользователя: владельцев групп yourusername:www-data во всех файлах и папках из app/storage .

  3. Добавьте разрешение для записи как для вас, так и для группы www-data :

     sudo chmod -R ug+w app/storage 

    Это рекурсивно ( -R ) добавляет ( + ) флаг записи ( w ) к пользователю ( u ) и группе ( g ), которые владеют файлами и папками из app/storage .

  4. Кроме того, некоторые полагают, что вам может понадобиться очистить кеш приложения и восстановить файлы автозагрузки Laravel.

     php artisan cache:clear php artisan dump-autoload 
  5. Наконец, вы можете захотеть восстановить файлы автозагрузки Composer.

     composer dump-autoload 

Что касается меня, я изменил разрешение на хранение с хранилищем chmod -R 777 storage и это хорошо работает.

Я проверил эту конфигурацию здесь .

Если изменение прав доступа к файлу, как описано в других ответах, не сработало, и вы используете CentOS 7 или RHEL, тогда проблема может быть защищенной программой selinux. Я боролся со всеми видами разрешений и групп, прежде чем отметить user3670777 ответ на Laravel 4: Не удалось открыть поток: разрешение отклонено

Надеюсь, это поможет другим.

Вы можете сделать это, выполнив следующие шаги.

 chmod -R 775 storage 

что значит

 7 - Owner can write 7 - Group can write 5 - Others cannot write! 

Если ваш веб-сервер не работает как Vagrant, он не сможет его написать, поэтому у вас есть 2 варианта:

 chmod -R 777 storage 

или изменить группу на пользователя веб-сервера, предположив, что это www-данные:

 chown -R vagrant:www-data storage 

Если все вышеперечисленные предложения не работают, отключите ваш selinux и повторите попытку