Ошибка в обработчике исключений. - Laravel

118

Это вопрос, связанный с установкой Laravel. У меня есть общедоступная установка сервера Unix:

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.org
DocumentRoot "/var/www/mydomain"
ServerName mydomain.org
ServerAlias www.mydomain.org
ErrorLog "/var/log/mydomain.org-error_log"
CustomLog "/var/log/mydomain.org-access_log" common
</VirtualHost>

Я могу нормально обслуживать документы из / var / www / mydomain, т.е. http://mydomain.org/test.php с test.php, содержащим:

<?php echo 'test';

работает отлично.

В bash с установленным Laravel через Composer и просмотром файлов:

# ls /var/www/mydomain/my-laravel-project

.gitattributes  CONTRIBUTING.md artisan         composer.json   phpunit.xml readme.md       vendor
.gitignore      app             bootstrap       composer.lock   public          server.php

Итак, когда я просматриваю:

http://mydomain.org/my-laravel-project/public/

почему мое приложение сообщает:

Error in exception handler. 

в браузере - на пустой белый экран? Я ожидаю увидеть заставку Laravel.

Более того, файлы журналов тоже ничего не показывают.

печенье
источник
Версия PHP? Можете ли вы проверить логины ваших серверов /var/logи посмотреть, что они говорят?
Джейсон Льюис
3
А как насчет журналов ошибок Laravel app/storage/logs? И все ли каталоги хранилища доступны для записи?
Джейсон Льюис
1
@Jason Как вы сказали - это были каталоги хранилища. Chmod -R 757 на хранилище, и я могу нажать на заставку. +1 и спасибо.
cookie

Ответы:

246

Более безопасным вариантом было бы изменить группу каталогов хранилища на группу веб-серверов (обычно apacheили www-data, но это может варьироваться в зависимости от разных операционных систем) и сохранить разрешения для каталога как 775.

chgrp -R www-data app/storage

Или с chown.

chown -R :www-data app/storage

Затем убедитесь, что права доступа к каталогу есть 775.

chmod -R 775 app/storage

С веб-сайта Laravel :

Laravel может потребовать настройки одного набора разрешений: для папок в приложении / хранилище требуется доступ на запись с веб-сервера.

Джейсон Льюис
источник
14
как правило, безопаснее сменить владельца группы на веб-сервер и не предоставлять «миру» полный доступ к вашим файлам. 775 - это значение по умолчанию для каталогов, поэтому этого должно быть достаточно. chgrp -R apache app / storage
hlev
5
На Mac вышеуказанные команды не работали. Однако эта команда выполнила: sudo chown -R _www app/storage(замените _www на имя вашего сервера Apache, если необходимо)
Лео Галлегильос
4
И тогда мне пришлось дать группе разрешение на запись :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Спасибо, я нашел это полезным. Но позже это создает проблемы, когда вы пытаетесь запустить 'php artisan migrate ...' - поскольку папка '/ app / storage /' выдает ошибку 'Permission Denied' - и вы продолжаете исправлять все разрешения для владельца 'www-data', пока вы не получите ошибку разрешений '/bootstrap/compiled.php'. Будет ли хорошей идеей установить это также для владельца www-data или установить все на 0777?
peedeeaay
3
(y), оцените изменение! chmod 777 испортил детство многим детям :)
MA Hossain Tonu
17

Laravel 5.2

chmod -R 777 хранилище

Старое приложение Laravel chmod 777 / storage / *

Обратите внимание, что если у вас есть разумно заблокированный выделенный сервер без каких-либо учетных записей пользователей, кроме вашей, 777 не должен представлять большей угрозы безопасности, чем что-либо еще. Чтобы злоумышленник мог воспользоваться этим, должна быть какая-то другая уязвимость, и в этот момент разрешение 777, вероятно, в любом случае является спорным. Однако, если вы находитесь на общем сервере с другими пользователями, которым не доверяете, вам нужно будет изучить более сложные разрешения или проверить, не обеспечил ли уже ваш хостинг-провайдер изоляцию.

Им действительно следует поместить это в документацию по быстрому запуску и предоставить примеры для различных настроек. Возможно, вам также придется запустить его снова после первой загрузки, так как автоматически создается больше каталогов. Поищите в журналах ошибки записи.

Также ваш DocumentRoot должен быть / path / to / laravel-project / public

malhal
источник
4
Согласен, а лучше еще более подробное сообщение об ошибке
homerjam
3
Они не должны предлагать вам перейти на www.domain.com/project/public, потому что это неправильный способ запуска приложения Laravel. Вы должны настроить свой веб-сервер для обслуживания public / * и ничего более, при этом public / index.php является единственной точкой входа для всего приложения. Вы можете сделать это очень легко с Apache; если вы используете nginx, вы, вероятно, знаете, что делаете. И если вы используете дешевый хост cPanel (мои соболезнования), также легко настроить веб-корень, чтобы он указывал на публику.
Borfast 02
11
серьезно предполагая, что 777 - это просто явное нарушение принципов безопасности ...
ftrotter
1
Я знаю, что ему год, но 777 - худший способ сделать это, он нарушает все правила безопасности, как сказал @ftrotter.
Зак Грирсон,
2

Я удалил старые сеансы внутри app/storage/sessionsпапки и 775разрешаю app/storageпосле этого работать как огонь!

chmod -R 775 app/storage

Удачи!

Абдулазиз Нур
источник
1

Это уже давно прошло, но все же у меня есть еще один совет относительно «ошибки в обработчике исключений».

Это случилось со мной, когда я запустил «php artisan», и это хороший способ оценить, работает ли ваша среда в целом.

Я запустил его, и это дало мне эту ошибку, и я не мог определить проблему, пока не отредактировал файл artisan в корневом каталоге моего проекта и не добавил оператор try catch:

try {
    $artisan = Illuminate\Console\Application::start($app);
}
catch (Exception $e)
{
    dd($e->getMessage());
}

В этот момент я наконец увидел поучительное сообщение:

string(41) "Connection refused [tcp://127.0.0.1:6379]"

что в моем случае было плохой конфигурацией Redis, но в вашем случае может быть что угодно.

Надеюсь, это кому-то поможет, или, по крайней мере, в следующий раз, когда я приеду сюда, я найду свой собственный ответ.

NiRR
источник
Спасибо. Я обнаружил свою проблему с помощью этого - он напечатан could not find driver. А потом я узнал, что установил php-mysql, а php7.0-mysqlтребовалось. Эта ссылка также помогла мне - digitalocean.com/community/tutorials/...
Udayraj Дешмук
0

Самый короткий способ решить эту проблему - запустить artisan с помощью sudo. Это предоставит мастеру все необходимые разрешения и не создаст проблем с безопасностью.

поэтому вместо того, чтобы начать подачу ремесленника с:

$ php artisan serve

попробуйте использовать:

$ sudo php artisan serve 

Таким образом, вам не нужно вносить какие-либо изменения разрешений

Skeletor
источник
-5

У меня такая же проблема, я просто меняю разрешение из каталога app / storage на 775 с помощью командной строки chmod

Кайо Катрим
источник
5
Это уже указано в принятом на данный момент ответе (и для получения полностью правильного ответа потребуется информация из этого ответа о правильной настройке группы каталога).
Мэтт Гибсон,