Error en el manejador de excepciones. - Laravel

118

Es una pregunta relacionada con la instalación de Laravel. Tengo una configuración de servidor Unix de cara al público:

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

Puedo servir documentos bien desde / var / www / mydomain, es decir, http://mydomain.org/test.php con test.php que contiene:

<?php echo 'test';

funciona bien.

En bash, con Laravel instalado a través de Composer y mirando los archivos:

# 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

Entonces, cuando busco:

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

¿Por qué mi solicitud informa:

Error in exception handler. 

en el navegador, ¿en una pantalla en blanco? Espero ver la pantalla de presentación de Laravel.

Además, los archivos de registro tampoco revelan nada.

Galleta
fuente
Versión PHP? ¿Puede comprobar los inicios de sesión de sus servidores /var/logy ver qué tienen que decir?
Jason Lewis
3
¿Qué pasa con los inicios de sesión de error de Laravel app/storage/logs? ¿Se pueden escribir todos los directorios de almacenamiento?
Jason Lewis
1
@Jason Como dijiste, eran los directorios de almacenamiento. Un chmod -R 757 en almacenamiento y puedo presionar la pantalla de bienvenida. +1 y gracias.
galleta

Respuestas:

246

La opción más segura sería cambiar el grupo de directorios de almacenamiento a su grupo de servidores web (generalmente apacheo www-data, pero esto puede variar entre los diferentes sistemas operativos) y mantener los permisos del directorio como 775.

chgrp -R www-data app/storage

O con chown.

chown -R :www-data app/storage

Luego asegúrese de que los permisos de directorio sean 775.

chmod -R 775 app/storage

Desde el sitio web de Laravel :

Laravel puede requerir que se configure un conjunto de permisos: las carpetas dentro de la aplicación / almacenamiento requieren acceso de escritura por parte del servidor web.

Jason Lewis
fuente
14
En general, es más seguro cambiar el propietario del grupo al servidor web y no otorgar al "mundo" acceso completo a sus archivos. 775 es el valor predeterminado para los directorios, por lo que debería ser suficiente. chgrp -R aplicación apache / almacenamiento
hlev
5
En Mac, los comandos anteriores no funcionaron. Sin embargo, este comando sí: sudo chown -R _www app/storage(reemplace _www con el nombre de su servidor Apache si es necesario)
Leo Galleguillos
4
Y luego tuve que darle permiso de escritura al grupo :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Gracias, encontré esto útil. Pero, luego crea problemas cuando intenta ejecutar 'php artisan migrate ...', ya que la carpeta '/ app / storage /' le da el error 'Permiso denegado', y sigue arreglando todos los permisos para el propietario 'www-data', hasta que llegue al error de permisos '/bootstrap/compiled.php'. ¿Es una buena idea configurar eso también, como propietario 'www-data', o configurar todo en 0777?
peedeeaay
3
(y), ¡aprecia el cambio! chmod 777 arruinó la infancia de muchos niños :)
MA Hossain Tonu
17

Laravel 5.2

almacenamiento chmod -R 777

Aplicación / almacenamiento / almacenamiento / * Laravel chmod 777 más antigua

Tenga en cuenta que si tiene un servidor dedicado razonablemente bloqueado sin cuentas de usuario que no sean las suyas, 777 no debería representar un riesgo de seguridad mayor que cualquier otra cosa. Tendría que haber alguna otra vulnerabilidad para que un usuario malintencionado se aprovechara de eso, y en ese momento, el permiso 777 probablemente sea discutible de todos modos. Sin embargo, si está en un servidor compartido con otros usuarios en los que no confía, tendrá que buscar permisos más complicados o verificar si su proveedor de alojamiento ya ha proporcionado aislamiento.

Realmente deberían poner esto en los documentos de inicio rápido y proporcionar ejemplos para varias configuraciones. Es posible que también deba ejecutarlo nuevamente después de la primera carga, ya que se crean más directorios automáticamente. Busque en sus registros errores de escritura.

Además, su DocumentRoot debe ser / ruta / a / laravel-project / public

malhal
fuente
4
De acuerdo, o mejor aún, un mensaje de error más detallado
homerjam
3
Deben no le dicen que vaya a www.domain.com/project/public porque esa no es la forma correcta de ejecutar una aplicación laravel. Debes configurar tu servidor web para que sirva public / * y nada más, siendo public / index.php el único punto de entrada para toda la aplicación. Puede hacerlo muy fácilmente con Apache; si está utilizando nginx, probablemente sepa lo que está haciendo. Y si está utilizando un host cPanel barato (mis condolencias), también es fácil configurar la raíz web para que apunte al público.
sábado
11
sugiriendo seriamente que 777 es la violación más clara de los principios de seguridad ...
ftrotter
1
Sé que tiene un año, pero 777 es la peor manera de hacerlo, rompe todas las reglas de seguridad como dijo @ftrotter.
Zac Grierson
2

¡Eliminé sesiones antiguas dentro de la app/storage/sessionscarpeta y doy 775permiso para app/storageque después de eso funcione como un incendio!

chmod -R 775 app/storage

¡Buena suerte!

Abdulaziz Noor
fuente
1

El tren ha pasado por esto hace mucho, mucho tiempo, pero aún tengo otro consejo sobre "Error en el controlador de excepciones".

Me sucedió esto cuando ejecuté "php artisan", que es una buena manera de evaluar si su entorno está funcionando en general.

Lo ejecuté y me dio ese error, y no pude identificar el problema hasta que edité el archivo artesanal en el directorio raíz de mi proyecto y agregué una declaración try catch:

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

En ese momento, finalmente vi un mensaje esclarecedor:

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

que en mi caso fue una mala configuración de redis, pero en tu caso podría ser cualquier cosa.

Espero que esto ayude a alguien, o al menos la próxima vez que llegue encontraré mi propia respuesta.

NiRR
fuente
Gracias. Descubrí mi problema usando esto - Se imprimió could not find driver. Y luego descubrí que lo había instalado php-mysql, mientras php7.0-mysqlse requería. Este enlace también me ayudó - digitalocean.com/community/tutorials/…
Udayraj Deshmukh
0

La forma más corta de resolver esto es comenzar de forma artesanal con sudo. Esto le dará al artesano todos los permisos que necesita y no causará ningún problema de seguridad.

así que en su lugar, comience el servicio artesanal con:

$ php artisan serve

intente usar:

$ sudo php artisan serve 

por lo que no tendrá que realizar ningún cambio de permiso

Esqueleto
fuente
-5

Tengo el mismo problema, acabo de cambiar el permiso de la aplicación de directorio / almacenamiento a 775 con la línea de comando chmod

Caio Cutrim
fuente
5
Esto ya se señala en la respuesta actualmente aceptada (y necesitaría la información de esa respuesta sobre cómo configurar el grupo del directorio correctamente para que sea una respuesta completamente correcta).
Matt Gibson