Помилка в обробці винятків. - Ларавель


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';

працює чудово.

По-іншому, 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 і спасибі
печиво

Відповіді:


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 /' дає помилку 'Permissions Denied' - і ви продовжуєте виправляти всі дозволи власника 'www-data', поки ви не отримаєте помилку дозволів '/bootstrap/compiled.php'. Чи добре це встановити також для власника "www-data" або встановити значення 0777?
peedeeaay

3
(у), оцініть зміну! chmod 777 погубив стільки дітей дитинства :)
М. А. Хоссайн Тону

17

Laravel 5.2

chmod -R 777 зберігання

Старіший додаток / зберігання Laravel chmod 777 / *

Зверніть увагу, якщо у вас досить заблокований спеціалізований сервер, на якому немає інших облікових записів користувачів, крім власних, 777 не повинен становити більше ризику для безпеки, ніж будь-що інше. Для того, щоб зловмисник скористатися цим зловмисним користувачем, повинна бути якась інша вразливість, і в цей момент дозвіл 777, мабуть, все-таки суперечить. Якщо ви перебуваєте на спільному сервері з іншими користувачами, яким ви не довіряєте, вам потрібно буде вивчити більш складні дозволи або перевірити, чи постачальник хостингу вже забезпечив ізоляцію.

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

Також ваш DocumentRoot має бути / path / to / laravel-project / public


4
Погоджено, а ще краще більш багатослівне повідомлення про помилку
homerjam

3
Вони не повинні говорити вам перейти на www.domain.com/project/public, оскільки це не правильний спосіб запуску програми Laravel. Ви повинні налаштувати свій веб-сервер для обслуговування public / * і нічого більше, при цьому public / index.php є єдиною точкою входу для всієї програми. Це можна зробити дуже легко з Apache; якщо ви використовуєте nginx, то ви, мабуть, знаєте, що робите. І якщо ви використовуєте дешевий хост cPanel (мої співчуття), також легко налаштувати веб-корінь, щоб вказувати на публіку.
borfast

11
серйозно припускаючи, що 777 - це лише
явне

1
Я знаю, що його рік, але 777 - це найгірший спосіб зробити це, він порушує всі правила безпеки, як сказав @ftrotter.
Zac Grierson

2

Я видалив старі сеанси всередині app/storage/sessionsпапки і даю 775дозвіл на app/storageте, що вона працює як пожежа!

chmod -R 775 app/storage

Удачі!


1

Про це пояснювали вже давно, але все ж у мене є ще одна порада щодо "Помилка в обробці винятків".

У мене таке траплялося, коли я працював "php artisan", що є хорошим способом оцінити, чи працює ваше середовище взагалі.

Я запустив це, і це дало мені цю помилку, і я не міг точно визначити проблему, поки я не відредагував файл ремісника у кореневому каталозі мого проекту та не додав заяву про випробування.

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

У цей момент я нарешті побачив просвічуюче повідомлення:

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

що в моєму випадку було поганою конфігурацією Redis, але у вашому випадку може бути що завгодно.

Я сподіваюся, що це комусь допоможе, або принаймні наступного разу, коли я приїду сюди, я знайду власну відповідь.


Дякую. Я дізнався свою проблему, використовуючи це - Це надруковано could not find driver. А потім я дізнався, що встановив php-mysql, поки php7.0-mysqlвимагав. Це посилання також мені допомогло - digitalocean.com/community/tutorials/…
Udayraj Deshmukh

0

Найкоротший спосіб вирішити це - почати майстра з судо. Це дасть майстрам усі необхідні дозволи, а також не складе проблем із безпекою.

тож замість того, щоб починати ремісника, подайте:

$ php artisan serve

спробуйте використовувати:

$ sudo php artisan serve 

Таким чином, вам не доведеться вносити будь-які зміни дозволу


-5

У мене така ж проблема, я просто змінюю дозвіл з каталогу / зберігання каталогу на 775 за допомогою командного рядка chmod


5
На це вже вказувалося у прийнятій на даний момент відповідь (і потрібна буде інформація з цієї відповіді про те, щоб правильно встановити групу каталогів, щоб була цілком правильною відповіддю.)
Метт Гібсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.