Erreur dans le gestionnaire d'exceptions. - Laravel

118

C'est une question liée à l'installation de Laravel. J'ai une configuration de serveur Unix publique:

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

Je peux servir des documents à partir de / var / www / mydomain ie http://mondomaine.org/test.php avec test.php contenant:

<?php echo 'test';

fonctionne très bien.

En bash, avec Laravel installé via Composer et en regardant les fichiers:

# 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

Donc, quand je navigue vers:

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

pourquoi mon dossier de candidature:

Error in exception handler. 

dans le navigateur - sur un écran blanc vierge? Je m'attends à voir l'écran de démarrage Laravel.

De plus, les fichiers journaux ne révèlent rien non plus.

biscuit
la source
Version PHP? Pouvez-vous vérifier les connexions de vos serveurs /var/loget voir ce qu'ils ont à dire, le cas échéant.
Jason Lewis
3
Qu'en est-il des erreurs de connexion de Laravel app/storage/logs? Et tous les répertoires de stockage sont-ils accessibles en écriture?
Jason Lewis
1
@Jason Comme vous l'avez dit - c'était les répertoires de stockage. Un chmod -R 757 sur le stockage et je peux frapper l'écran de démarrage. +1 et merci.
cookie du

Réponses:

246

L'option la plus sûre serait de changer le groupe des répertoires de stockage en votre groupe de serveurs Web (généralement apacheou www-data, mais cela peut varier entre les différents systèmes d'exploitation) et de conserver les autorisations du répertoire comme 775.

chgrp -R www-data app/storage

Ou avec chown.

chown -R :www-data app/storage

Assurez-vous ensuite que les autorisations de répertoire sont 775.

chmod -R 775 app/storage

Depuis le site Web de Laravel :

Laravel peut nécessiter la configuration d'un ensemble d'autorisations: les dossiers dans l'application / le stockage nécessitent un accès en écriture par le serveur Web.

Jason Lewis
la source
14
il est généralement plus sûr de changer de propriétaire de groupe sur le serveur Web et de ne pas accorder au «monde» un accès complet à vos fichiers. 775 est la valeur par défaut pour les répertoires, cela devrait donc suffire. chgrp -R apache app / storage
hlev
5
Sur Mac, les commandes ci-dessus ne fonctionnaient pas. Cependant, cette commande a fait: sudo chown -R _www app/storage(remplacez _www par le nom de votre serveur Apache si nécessaire)
Leo Galleguillos
4
Et puis j'ai dû donner la permission d'écrire au groupe :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Merci, j'ai trouvé cela utile. Mais, plus tard, cela crée des problèmes lorsque vous essayez d'exécuter 'php artisan migrate ...' - car le dossier '/ app / storage /' vous donne l'erreur 'Permission Denied' - et vous continuez à fixer toutes les autorisations au propriétaire 'www-data', jusqu'à ce que vous obteniez l'erreur d'autorisations '/bootstrap/compiled.php'. Est-ce une bonne idée de définir cela également, sur le propriétaire «www-data», ou de définir tout sur 0777?
peedeeaay
3
(y), appréciez le changement! chmod 777 a ruiné l'enfance de tant d'enfants :)
MA Hossain Tonu
17

Laravel 5.2

Stockage chmod -R 777

Ancienne application Laravel chmod 777 / stockage / *

Notez que si vous avez un serveur dédié raisonnablement verrouillé sans compte utilisateur autre que le vôtre, 777 ne devrait pas poser plus de risque de sécurité qu'autre chose. Il devrait y avoir une autre vulnérabilité pour qu'un utilisateur malveillant puisse en profiter, et à ce stade, l'autorisation 777 est probablement sans objet de toute façon. Si toutefois vous êtes sur un serveur partagé avec d'autres utilisateurs auxquels vous ne faites pas confiance, vous devrez vous pencher sur des autorisations plus complexes ou vérifier si votre fournisseur d'hébergement a déjà fourni une isolation.

Ils devraient vraiment mettre cela dans la documentation de démarrage rapide et fournir des exemples pour diverses configurations. Vous devrez peut-être l'exécuter à nouveau après le premier chargement, car d'autres répertoires sont créés automatiquement. Recherchez dans vos journaux les erreurs d'écriture.

Votre DocumentRoot doit également être / path / to / laravel-project / public

malhal
la source
4
D'accord, ou mieux encore un message d'erreur plus verbeux
homerjam
3
Ils ne doivent pas vous dire d'aller sur www.domain.com/project/public car ce n'est pas la bonne façon d'exécuter une application Laravel. Vous devez configurer votre serveur Web pour qu'il serve public / * et rien de plus, public / index.php étant le seul point d'entrée pour l'ensemble de l'application. Vous pouvez le faire très facilement avec Apache; si vous utilisez nginx, vous savez probablement ce que vous faites. Et si vous utilisez un hôte cPanel bon marché (mes condoléances), il est également facile de configurer la racine Web pour qu'elle pointe vers le public.
borfast
11
suggérer sérieusement que 777 n'est que la violation la plus claire des principes de sécurité ...
ftrotter
1
Je sais qu'il a un an, mais 777 est la pire façon de le faire, il enfreint toutes les règles de sécurité comme l'a dit @ftrotter.
Zac Grierson
2

J'ai supprimé les anciennes sessions dans le app/storage/sessionsdossier et j'en ai donné la 775permission app/storageaprès cela, cela fonctionne comme un feu!

chmod -R 775 app/storage

Bonne chance!

Abdulaziz Noor
la source
1

Le train en marche est passé depuis longtemps, mais j'ai encore un autre conseil concernant "Erreur dans le gestionnaire d'exceptions".

Cela m'est arrivé lorsque j'ai lancé "php artisan", ce qui est un bon moyen d'évaluer si votre environnement fonctionne en général.

Je l'ai exécuté et cela m'a donné cette erreur, et je ne pouvais pas identifier le problème tant que je n'ai pas édité le fichier artisan dans le répertoire racine de mon projet et ajouté une instruction try catch:

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

À quel point j'ai finalement vu un message éclairant:

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

qui dans mon cas était une mauvaise configuration de redis, mais dans votre cas pourrait être n'importe quoi.

J'espère que cela aidera quelqu'un, ou du moins la prochaine fois que j'arriverai ici, je trouverai ma propre réponse.

NiRR
la source
Merci. J'ai découvert mon problème en utilisant ceci - Il a imprimé could not find driver. Et puis j'ai découvert que j'avais installé php-mysql, alors que php7.0-mysqlc'était nécessaire. Ce lien m'a également aidé - digitalocean.com/community/tutorials/…
Udayraj Deshmukh
0

Le moyen le plus court de résoudre ce problème est de commencer artisan avec sudo. Cela donnera à l'artisan toutes les autorisations dont il a besoin et ne posera aucun problème de sécurité.

donc au lieu de commencer artisan servir avec:

$ php artisan serve

essayez d'utiliser:

$ sudo php artisan serve 

vous n'aurez donc pas à apporter de modifications d'autorisation

Squelette
la source
-5

J'ai le même problème, je change juste l'autorisation du répertoire app / storage en 775 avec la ligne de commande chmod

Caio Cutrim
la source
5
Cela est déjà souligné dans la réponse actuellement acceptée (et aurait besoin des informations de cette réponse sur la configuration correcte du groupe de l'annuaire pour être une réponse entièrement correcte.)
Matt Gibson