Errore nel gestore delle eccezioni. - Laravel


118

È una domanda relativa all'installazione di Laravel. Ho una configurazione del server Unix per il pubblico:

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

Posso servire bene i documenti da / var / www / miodominio, ad esempio http://mydomain.org/test.php con test.php contenente:

<?php echo 'test';

funziona bene.

In bash, con Laravel installato tramite Composer e guardando i file:

# 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

Quindi, quando cerco:

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

perché la mia domanda riporta:

Error in exception handler. 

nel browser - su uno schermo bianco vuoto? Mi aspetto di vedere la schermata iniziale di Laravel.

Inoltre, i file di registro non rivelano nulla.


Versione PHP? Puoi controllare i tuoi server di accesso /var/loge vedere cosa hanno da dire, se non altro.
Jason Lewis

3
E i log di errore di Laravel app/storage/logs? E tutte le directory di archiviazione sono scrivibili?
Jason Lewis

1
@ Jason Come hai detto, erano le directory di archiviazione. Un chmod -R 757 in memoria e posso premere la schermata iniziale. +1 e grazie.
biscotto

Risposte:


246

L'opzione più sicura sarebbe quella di cambiare il gruppo delle directory di archiviazione nel tuo gruppo di server web (di solito apacheo www-data, ma questo può variare tra i diversi sistemi operativi) e mantenere i permessi della directory come 775.

chgrp -R www-data app/storage

O con chown.

chown -R :www-data app/storage

Quindi assicurati che le autorizzazioni della directory siano 775.

chmod -R 775 app/storage

Dal sito web Laravel :

Laravel potrebbe richiedere la configurazione di un set di autorizzazioni: le cartelle all'interno dell'app / spazio di archiviazione richiedono l'accesso in scrittura dal server web.


14
generalmente è più sicuro cambiare il proprietario del gruppo sul server web e non concedere a "tutto il mondo" l'accesso completo ai tuoi file. 775 è l'impostazione predefinita per le directory, quindi dovrebbe essere sufficiente. chgrp -R apache app / storage
hlev

5
Su Mac, i comandi precedenti non funzionavano. Tuttavia, questo comando ha: sudo chown -R _www app/storage(sostituire _www con il nome del server Apache se necessario)
Leo Galleguillos

4
E poi ho dovuto dare al gruppo il permesso di scrivere :chmod -R g+w app/storage
Daniel AA Pelsmaeker

Grazie, l'ho trovato utile. Ma in seguito crea problemi quando provi a eseguire "php artisan migrate ..." - poiché la cartella "/ app / storage /" ti dà l'errore "Permission Denied" - e continui a correggere tutti i permessi al proprietario "www-data", finché non si arriva all'errore di autorizzazione "/bootstrap/compiled.php". È una buona idea impostare anche quello, come proprietario "www-data", o impostare tutto su 0777?
peedeea del

3
(y), apprezza il cambiamento! chmod 777 ha rovinato l'infanzia di così tanti bambini :)
MA Hossain Tonu

17

Laravel 5.2

chmod -R 777 archiviazione

Vecchio Laravel chmod 777 app / archiviazione / *

Nota se hai un server dedicato ragionevolmente bloccato senza account utente diversi dal tuo, 777 non dovrebbe rappresentare un rischio per la sicurezza più di qualsiasi altra cosa. Ci dovrebbe essere qualche altra vulnerabilità per un utente malintenzionato per trarne vantaggio e, a quel punto, l'autorizzazione 777 è probabilmente comunque discutibile. Se tuttavia ti trovi su un server condiviso con altri utenti di cui non ti fidi, dovrai esaminare autorizzazioni più complicate o verificare se il tuo provider di hosting ha già fornito l'isolamento.

Dovrebbero davvero inserirlo nei documenti di avvio rapido e fornire esempi per varie configurazioni. Potrebbe anche essere necessario eseguirlo di nuovo dopo il primo caricamento poiché vengono create automaticamente più directory. Cerca nei tuoi log errori di scrittura.

Anche il tuo DocumentRoot dovrebbe essere / path / to / laravel-project / public


4
D'accordo, o meglio ancora un messaggio di errore più dettagliato
homerjam

3
Dovrebbero Non ti dicono di andare a www.domain.com/project/public perché non è il modo corretto di eseguire un'applicazione laravel. Dovresti impostare il tuo server web per servire public / * e nient'altro, con public / index.php che è l'unico punto di ingresso per l'intera applicazione. Puoi farlo molto facilmente con Apache; se stai usando nginx, probabilmente sai cosa stai facendo. E se stai usando un host cPanel economico (le mie condoglianze) è anche facile configurare la radice web in modo che punti al pubblico.
Borfast

11
suggerire seriamente che 777 sia solo la più chiara violazione dei principi di sicurezza ...
ftrotter

1
So che è vecchio di un anno, ma 777 è il modo peggiore per farlo, infrange tutte le regole di sicurezza come ha detto @ftrotter.
Zac Grierson

2

Ho cancellato le vecchie sessioni all'interno della app/storage/sessionscartella e do il 775permesso di app/storagefarlo funzionare come un fuoco!

chmod -R 775 app/storage

In bocca al lupo!


1

Il carrozzone è passato su questo molto molto tempo fa, ma ho ancora un altro consiglio in merito a "Errore nel gestore delle eccezioni".

Questo mi è successo quando ho eseguito "php artisan", che è un buon modo per valutare se il tuo ambiente funziona in generale.

L'ho eseguito e mi ha dato quell'errore, e non sono riuscito a individuare il problema finché non ho modificato il file artisan nella directory principale del mio progetto e ho aggiunto un'istruzione try catch:

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

A quel punto ho finalmente visto un messaggio illuminante:

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

che nel mio caso era una cattiva configurazione redis, ma nel tuo caso potrebbe essere qualsiasi cosa.

Spero che questo aiuti qualcuno, o almeno la prossima volta che arriverò qui troverò la mia risposta.


Grazie. Ho scoperto il mio problema usando questo: è stampato could not find driver. E poi ho scoperto che avevo installato php-mysql, mentre php7.0-mysqlera richiesto. Anche questo collegamento mi ha aiutato - digitalocean.com/community/tutorials/…
Udayraj Deshmukh

0

Il modo più breve per risolvere questo problema è avviare Artisan con sudo. Questo darà ad artisan tutte le autorizzazioni di cui ha bisogno e non creerà alcun problema di sicurezza.

quindi invece partendo da artigiano servire con:

$ php artisan serve

prova a usare:

$ sudo php artisan serve 

quindi non dovrai apportare modifiche alle autorizzazioni


-5

Ho lo stesso problema, ho solo cambiato l'autorizzazione dalla directory app / storage a 775 con la riga di comando chmod


5
Questo è già sottolineato nella risposta attualmente accettata (e sarebbero necessarie le informazioni di quella risposta sull'impostazione corretta del gruppo della directory per essere una risposta completamente corretta.)
Matt Gibson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.