Fehler im Ausnahmebehandler. - Laravel


118

Es ist eine Frage zur Laravel-Installation. Ich habe ein öffentlich zugängliches Unix-Server-Setup:

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

Ich kann Dokumente gut aus / var / www / mydomain liefern, dh http://mydomain.org/test.php, mit test.php bereitstellen, das Folgendes enthält:

<?php echo 'test';

funktioniert gut.

In Bash, mit Laravel über Composer installiert und die Dateien betrachten:

# 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

Also, wenn ich navigiere zu:

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

Warum berichtet meine Bewerbung:

Error in exception handler. 

im Browser - auf einem leeren weißen Bildschirm? Ich erwarte den Laravel-Begrüßungsbildschirm.

Darüber hinaus enthüllen die Protokolldateien auch nichts.


PHP-Version? Können Sie Ihre Server-Logins überprüfen /var/logund sehen, was sie, wenn überhaupt, zu sagen haben?
Jason Lewis

3
Was ist mit Laravels Fehleranmeldungen app/storage/logs? Und sind alle Speicherverzeichnisse beschreibbar?
Jason Lewis

1
@ Jason Wie Sie sagten - es waren die Speicherverzeichnisse. Ein chmod -R 757 im Speicher und ich kann den Begrüßungsbildschirm treffen. +1 und danke.
Cookie

Antworten:


246

Die sicherere Option wäre, die Gruppe der Speicherverzeichnisse in Ihre Webservergruppe zu ändern (normalerweise apacheoder www-data, dies kann jedoch zwischen den verschiedenen Betriebssystemen variieren) und die Berechtigungen ab dem Verzeichnis als beizubehalten 775.

chgrp -R www-data app/storage

Oder mit chown.

chown -R :www-data app/storage

Stellen Sie dann sicher, dass die Verzeichnisberechtigungen vorhanden sind 775.

chmod -R 775 app/storage

Von der Laravel-Website :

Für Laravel muss möglicherweise ein Satz von Berechtigungen konfiguriert werden: Ordner in App / Speicher erfordern Schreibzugriff durch den Webserver.


14
Im Allgemeinen ist es sicherer, den Gruppenbesitzer auf den Webserver zu ändern und "der Welt" keinen vollständigen Zugriff auf Ihre Dateien zu gewähren. 775 ist die Standardeinstellung für Verzeichnisse, daher sollte dies ausreichen. chgrp -R Apache App / Speicher
hlev

5
Unter Mac funktionierten die oben genannten Befehle nicht. Dieser Befehl hat jedoch sudo chown -R _www app/storageFolgendes bewirkt : (Ersetzen Sie _www bei Bedarf durch Ihren Apache-Servernamen.)
Leo Galleguillos

4
Und dann musste ich der Gruppe die Erlaubnis zum Schreiben geben :chmod -R g+w app/storage
Daniel AA Pelsmaeker

Danke, ich fand das hilfreich. Später treten jedoch Probleme auf, wenn Sie versuchen, "php artisan migrate ..." auszuführen - da der Ordner "/ app / storage /" den Fehler "Berechtigung verweigert" ausgibt und Sie alle Berechtigungen für den Eigentümer korrigieren 'www-data', bis der Berechtigungsfehler '/bootstrap/compiled.php' angezeigt wird. Ist es eine gute Idee, dies auch auf den Eigentümer 'www-data' zu setzen oder alles auf 0777 zu setzen?
Peedeeaay

3
(y), schätze die Veränderung! chmod 777 ruiniert so viele Kinder Kindheit :)
MA Hossain Tonu

17

Laravel 5.2

chmod -R 777 Speicher

Ältere Laravel chmod 777 App / Speicher / *

Hinweis: Wenn Sie einen vernünftig gesperrten dedizierten Server ohne andere Benutzerkonten als Ihren eigenen haben, sollte 777 kein größeres Sicherheitsrisiko darstellen als alles andere. Es müsste eine andere Sicherheitslücke für einen böswilligen Benutzer geben, um dies auszunutzen, und zu diesem Zeitpunkt ist die 777-Berechtigung wahrscheinlich ohnehin umstritten. Wenn Sie sich jedoch auf einem gemeinsam genutzten Server mit anderen Benutzern befinden, denen Sie nicht vertrauen, müssen Sie sich mit komplizierteren Berechtigungen befassen oder prüfen, ob Ihr Hosting-Anbieter bereits eine Isolation bereitgestellt hat.

Sie sollten dies wirklich in die Schnellstartdokumente aufnehmen und Beispiele für verschiedene Setups bereitstellen. Möglicherweise müssen Sie es auch nach dem ersten Laden erneut ausführen, da automatisch weitere Verzeichnisse erstellt werden. Suchen Sie in Ihren Protokollen nach Schreibfehlern.

Außerdem sollte Ihr DocumentRoot / path / to / laravel-project / public sein


4
Einverstanden, oder besser noch eine ausführlichere Fehlermeldung
Homerjam

3
Sie sollten Ihnen nicht sagen, dass Sie zu www.domain.com/project/public gehen sollen, da dies nicht die richtige Methode zum Ausführen einer Laravel-Anwendung ist. Sie sollten Ihren Webserver so einrichten, dass er public / * und nichts weiter bereitstellt, wobei public / index.php der einzige Einstiegspunkt für die gesamte Anwendung ist. Mit Apache können Sie das sehr einfach tun. Wenn Sie Nginx verwenden, wissen Sie wahrscheinlich, was Sie tun. Und wenn Sie einen billigen cPanel-Host verwenden (mein Beileid), ist es auch einfach, das Webstamm so einzurichten, dass es auf die Öffentlichkeit verweist.
Borfast

11
777 ernsthaft
vorzuschlagen

1
Ich weiß, dass es ein Jahr alt ist, aber 777 ist der schlechteste Weg, dies zu tun. Es verstößt gegen alle Sicherheitsregeln, wie @ftrotter sagte.
Zac Grierson

2

Ich habe alte Sitzungen im app/storage/sessionsOrdner gelöscht und eine 775Erlaubnis gegeben, app/storagedass es danach wie ein Feuer funktioniert!

chmod -R 775 app/storage

Viel Glück!


1

Der Zug hat dies vor langer, langer Zeit weitergegeben, aber ich habe noch einen weiteren Rat bezüglich "Fehler im Ausnahmebehandler".

Das passierte mir, als ich "php artisan" leitete. Dies ist eine gute Möglichkeit, um zu beurteilen, ob Ihre Umgebung im Allgemeinen funktioniert.

Ich habe es ausgeführt und es gab mir diesen Fehler, und ich konnte das Problem nicht genau bestimmen, bis ich die Handwerkerdatei im Stammverzeichnis meines Projekts bearbeitet und eine try catch-Anweisung hinzugefügt habe:

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

An diesem Punkt sah ich endlich eine aufschlussreiche Botschaft:

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

Das war in meinem Fall eine schlechte Redis-Konfiguration, aber in Ihrem Fall könnte alles sein.

Ich hoffe, das hilft jemandem, oder zumindest wenn ich das nächste Mal hier bin, werde ich meine eigene Antwort finden.


Vielen Dank. Ich habe mein Problem damit herausgefunden - es wurde gedruckt could not find driver. Und dann fand ich heraus, dass ich installiert hatte php-mysql, während php7.0-mysqles erforderlich war. Dieser Link hat mir auch geholfen - digitalocean.com/community/tutorials/…
Udayraj Deshmukh

0

Der kürzeste Weg, dies zu lösen, besteht darin, Handwerker mit Sudo zu beginnen. Dies gibt dem Handwerker alle erforderlichen Berechtigungen und macht auch keine Sicherheitsprobleme.

Also stattdessen anfangen Handwerker dienen mit:

$ php artisan serve

versuchen Sie es mit:

$ sudo php artisan serve 

Daher müssen Sie keine Berechtigungsänderungen vornehmen


-5

Ich habe das gleiche Problem, ich ändere nur die Berechtigung von Verzeichnis App / Speicher auf 775 mit der Befehlszeile von chmod


5
Dies wird bereits in der aktuell akzeptierten Antwort erwähnt (und würde die Informationen aus dieser Antwort zum korrekten Einstellen der Gruppe des Verzeichnisses benötigen, um eine vollständig korrekte Antwort zu sein.)
Matt Gibson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.