Błąd w obsłudze wyjątków. - Laravel

118

Jest to pytanie związane z instalacją Laravel. Mam publiczną konfigurację serwera Unix:

<VirtualHost *:80>
ServerAdmin [email protected]
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>

Mogę udostępniać dokumenty z / var / www / mydomain, czyli http://mydomain.org/test.php z test.php zawierającym:

<?php echo 'test';

działa w porządku.

W bash, z Laravelem zainstalowanym przez Composera i przeglądaniem plików:

# 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

Kiedy więc przeglądam:

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

dlaczego moja aplikacja zgłasza:

Error in exception handler. 

w przeglądarce - na pustym białym ekranie? Spodziewam się ekranu powitalnego Laravel.

Co więcej, pliki dziennika również niczego nie ujawniają.

ciastko
źródło
Wersja PHP? Czy możesz sprawdzić, czy twoje serwery logują się /var/logi zobaczyć, co, jeśli cokolwiek, mają do powiedzenia.
Jason Lewis
3
A co z błędnymi logami Laravel app/storage/logs? I czy wszystkie katalogi pamięci masowej można zapisywać?
Jason Lewis
1
@Jason Jak powiedziałeś - to były katalogi pamięci. Chmod -R 757 na przechowywanie i mogę przejść do ekranu powitalnego. +1 i dzięki.
ciasteczko

Odpowiedzi:

246

Bezpieczniejszą opcją byłaby zmiana grupy katalogów pamięci masowej na grupę serwerów WWW (zwykle apachelub www-data, ale może się to różnić w różnych systemach operacyjnych) i zachować uprawnienia z katalogu jako 775.

chgrp -R www-data app/storage

Albo z chown.

chown -R :www-data app/storage

Następnie upewnij się, że masz uprawnienia do katalogu 775.

chmod -R 775 app/storage

Ze strony internetowej Laravel :

Laravel może wymagać skonfigurowania jednego zestawu uprawnień: foldery w aplikacji / pamięci wymagają dostępu do zapisu przez serwer sieciowy.

Jason Lewis
źródło
14
ogólnie bezpieczniej jest zmienić właściciela grupy na serwer sieciowy i nie przyznawać „całemu światu” pełnego dostępu do plików. 775 jest wartością domyślną dla katalogów, więc to powinno wystarczyć. chgrp -R apache app / storage
hlev
5
Na Macu powyższe polecenia nie działały. Jednak to polecenie zrobiło: sudo chown -R _www app/storage(w razie potrzeby zastąp _www nazwą serwera Apache)
Leo Galleguillos
4
A potem musiałem dać grupie pozwolenie na pisanie :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Dzięki, uznałam to za pomocne. Ale później stwarza problemy, gdy próbujesz uruchomić `` php artisan migrate ... '' - ponieważ folder `` / app / storage / '' wyświetla błąd `` Permission Denied '' - i kontynuujesz naprawianie wszystkich uprawnień właściciela „www-data”, aż dojdziesz do błędu uprawnień „/bootstrap/compiled.php”. Czy to również dobry pomysł, aby ustawić to również na „dane www” właściciela, czy ustawić wszystko na 0777?
peedeeaay
3
(y), doceń zmianę! chmod 777 zrujnował tak wiele dzieciaków z dzieciństwa :)
MA Hossain Tonu
17

Laravel 5.2

chmod -R 777 przechowywania

Starsza aplikacja / pamięć masowa Laravel chmod 777 *

Zauważ, że jeśli masz rozsądnie zablokowany serwer dedykowany bez kont użytkowników innych niż twoje własne, 777 nie powinno stanowić większego zagrożenia dla bezpieczeństwa niż cokolwiek innego. Aby złośliwy użytkownik mógł to wykorzystać, musiałaby istnieć jakaś inna luka w zabezpieczeniach, aw tym momencie uprawnienie 777 jest prawdopodobnie dyskusyjne. Jeśli jednak korzystasz z serwera współdzielonego z innymi użytkownikami, którym nie ufasz, musisz przyjrzeć się bardziej skomplikowanym uprawnieniom lub sprawdzić, czy dostawca hostingu zapewnił już izolację.

Powinni naprawdę umieścić to w dokumentacji szybkiego startu i podać przykłady dla różnych konfiguracji. Może być również konieczne ponowne uruchomienie go po pierwszym załadowaniu, ponieważ więcej katalogów jest tworzonych automatycznie. Poszukaj w swoich dziennikach błędów zapisu.

Również twój DocumentRoot powinien być / path / to / laravel-project / public

malhal
źródło
4
Zgoda, albo jeszcze lepiej, bardziej szczegółowy komunikat o błędzie
homerjam
3
Powinny one nie powiedzieć, aby przejść do www.domain.com/project/public dlatego, że nie jest to właściwy sposób, aby uruchomić aplikację laravel. Powinieneś skonfigurować swój serwer sieciowy, aby obsługiwał public / * i nic więcej, z public / index.php jako jedynym punktem wejścia dla całej aplikacji. Możesz to zrobić bardzo łatwo z Apache; jeśli używasz nginx, prawdopodobnie wiesz, co robisz. A jeśli używasz taniego hosta cPanel (moje kondolencje), łatwo jest również skonfigurować katalog główny sieci tak, aby wskazywał na publiczny.
borfast
11
poważnie sugeruje, że 777 to tylko najbardziej oczywiste naruszenie zasad bezpieczeństwa ...
ftrotter
1
Wiem, że ma rok, ale 777 to najgorszy sposób na zrobienie tego, ponieważ łamie wszystkie zasady bezpieczeństwa, jak powiedział @ftrotter.
Zac Grierson
2

Usunąłem stare sesje w app/storage/sessionsfolderze i dałem 775pozwolenie, aby app/storagepotem działało jak ogień!

chmod -R 775 app/storage

Powodzenia!

Abdulaziz Noor
źródło
1

Moda na to przeszła już dawno temu, ale wciąż mam kolejną radę dotyczącą „Błąd obsługi wyjątków”.

Przydarzyło mi się to, gdy uruchomiłem „php artisan”, co jest dobrym sposobem na ocenę, czy Twoje środowisko ogólnie działa.

Uruchomiłem go i dostałem ten błąd i nie mogłem wskazać problemu, dopóki nie wyedytowałem pliku rzemieślnika w katalogu głównym mojego projektu i nie dodałem instrukcji try catch:

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

W tym momencie w końcu zobaczyłem pouczającą wiadomość:

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

co w moim przypadku było złą konfiguracją redis, ale w twoim przypadku może to być wszystko.

Mam nadzieję, że to komuś pomoże, a przynajmniej gdy następnym razem tu dotrę, znajdę własną odpowiedź.

NiRR
źródło
Dzięki. Dowiedziałem się o moim problemie, używając tego - wydrukowano could not find driver. A potem dowiedziałem się, że zainstalowałem php-mysql, gdy php7.0-mysqlbyło to wymagane. Ten link pomógł mi również - digitalocean.com/community/tutorials/...
Udayraj Deshmukh
0

Najkrótszym sposobem rozwiązania tego problemu jest rozpoczęcie pracy rzemieślniczej z sudo. Zapewni to rzemieślnikowi wszystkie potrzebne uprawnienia i nie spowoduje żadnych problemów z bezpieczeństwem.

więc zamiast początkującego rzemieślnika serwuj z:

$ php artisan serve

spróbuj użyć:

$ sudo php artisan serve 

dzięki temu nie będziesz musiał dokonywać żadnych zmian uprawnień

Szkieletor
źródło
-5

Mam ten sam problem, po prostu zmieniam uprawnienia z katalogu app / storage na 775 za pomocą wiersza poleceń chmod

Caio Cutrim
źródło
5
Jest to już wskazane w aktualnie akceptowanej odpowiedzi (i wymagałoby to informacji z tej odpowiedzi o poprawnym ustawieniu grupy katalogu, aby była w pełni poprawną odpowiedzią).
Matt Gibson,