Erro no manipulador de exceções. - Laravel

118

É uma questão relacionada à instalação do Laravel. Tenho uma configuração de servidor Unix voltado ao 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>

Posso servir documentos de / var / www / mydomain, ou seja, http://mydomain.org/test.php com test.php contendo:

<?php echo 'test';

funciona bem.

No bash, com o Laravel instalado através do Composer e olhando os arquivos:

# 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

Então, quando eu navegar para:

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

por que meu aplicativo relata:

Error in exception handler. 

no navegador - em uma tela branca em branco? Estou esperando ver a tela inicial do Laravel.

Além disso, os arquivos de log também não revelam nada.

biscoito
fonte
Versão PHP? Você pode verificar o login dos seus servidores /var/loge ver o que eles têm a dizer, se houver alguma coisa.
Jason Lewis
3
E o erro de login do Laravel app/storage/logs? E todos os diretórios de armazenamento são graváveis?
Jason Lewis
1
@Jason Como você disse - foram os diretórios de armazenamento. Um chmod -R 757 no armazenamento e posso acertar a tela inicial. +1 e obrigado.
cookie de

Respostas:

246

A opção mais segura seria alterar o grupo dos diretórios de armazenamento para o seu grupo de servidores web (normalmente apacheou www-data, mas isso pode variar entre os diferentes sistemas operacionais) e manter as permissões do diretório como 775.

chgrp -R www-data app/storage

Ou com chown.

chown -R :www-data app/storage

Em seguida, certifique-se de que as permissões do diretório são 775 .

chmod -R 775 app/storage

De site Laravel :

O Laravel pode exigir que um conjunto de permissões seja configurado: pastas dentro do app / armazenamento requerem acesso de gravação pelo servidor web.

Jason Lewis
fonte
14
geralmente mais seguro mudar o proprietário do grupo para o servidor da web e não conceder acesso total a "o mundo" aos seus arquivos. 775 é o padrão para diretórios, portanto, deve ser o suficiente. chgrp -R apache app / storage
hlev
5
No Mac, os comandos acima não funcionaram. No entanto, este comando: sudo chown -R _www app/storage(substitua _www pelo nome do servidor Apache, se necessário)
Leo Galleguillos
4
E então eu tive que dar permissão de escrita ao grupo :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Obrigado, achei isso útil. Mas, mais tarde, ele cria problemas quando você tenta executar 'php artisan migrate ...' - já que a pasta '/ app / storage /' apresenta o erro 'Permission Denied' - e você continua corrigindo todas as permissões para o proprietário 'www-data', até chegar ao erro de permissão '/bootstrap/compiled.php'. É uma boa ideia definir isso também, como proprietário 'www-data' ou definir tudo como 0777?
peedeeaay
3
(y), agradeço a mudança! chmod 777 arruinou a infância de tantas crianças :)
MA Hossain Tonu
17

Laravel 5.2

chmod -R 777 armazenamento

Laravel mais antigo chmod 777 app / storage / *

Observe se você tem um servidor dedicado razoavelmente bloqueado, sem contas de usuário além da sua, o 777 não deve representar mais risco de segurança do que qualquer outra coisa. Deve haver alguma outra vulnerabilidade para um usuário mal-intencionado tirar vantagem disso e, nesse ponto, a permissão 777 provavelmente é discutível de qualquer maneira. Se, no entanto, você estiver em um servidor compartilhado com outros usuários nos quais não confia, será necessário examinar as permissões mais complicadas ou verificar se o seu provedor de hospedagem já forneceu isolamento.

Eles realmente deveriam colocar isso nos documentos de início rápido e fornecer exemplos para várias configurações. Você também pode ter que executá-lo novamente após o primeiro carregamento, pois mais diretórios são criados automaticamente. Procure em seus logs por erros de gravação.

Além disso, seu DocumentRoot deve ser / path / to / laravel-project / public

Malhal
fonte
4
Concordo, ou melhor ainda, uma mensagem de erro mais detalhada
homerjam
3
Eles não devem dizer para você ir para www.domain.com/project/public porque essa não é a maneira correta de executar um aplicativo Laravel. Você deve configurar seu servidor web para servir public / * e nada mais, com public / index.php sendo o único ponto de entrada para todo o aplicativo. Você pode fazer isso facilmente com o Apache; se estiver usando o nginx, provavelmente sabe o que está fazendo. E se você estiver usando um host cPanel barato (minhas condolências) também é fácil configurar a raiz da web para apontar para o público.
borfast,
11
sugerir seriamente que 777 é apenas a violação mais clara dos princípios de segurança ...
ftrotter
1
Eu sei que tem um ano de idade, mas 777 é a pior maneira de fazer isso, pois quebra todas as regras de segurança como @ftrotter disse.
Zac Grierson,
2

Eu apaguei sessões antigas dentro da app/storage/sessionspasta e dou 775permissão para app/storagedepois que está funcionando como um incêndio!

chmod -R 775 app/storage

Boa sorte!

Abdulaziz Noor
fonte
1

O movimento já passou há muito tempo, mas ainda tenho outro conselho sobre "Erro no manipulador de exceções".

Isso aconteceu comigo quando executei o "php artisan", que é uma boa maneira de avaliar se o seu ambiente está funcionando em geral.

Eu o executei e ele me deu aquele erro, e não consegui identificar o problema até que editei o arquivo artisan no diretório raiz do meu projeto e adicionei uma instrução try catch:

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

Nesse ponto, finalmente vi uma mensagem esclarecedora:

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

que no meu caso foi uma configuração de redis ruim, mas no seu caso pode ser qualquer coisa.

Espero que isso ajude alguém, ou pelo menos da próxima vez que eu chegar aqui, encontrarei minha própria resposta.

NiRR
fonte
Obrigado. Eu descobri meu problema usando isso - é impresso could not find driver. E então descobri que tinha instalado php-mysql, enquanto php7.0-mysqlera necessário. Este link também me ajudou - digitalocean.com/community/tutorials/…
Udayraj Deshmukh
0

A maneira mais rápida de resolver isso é começando o artesão com o sudo. Isso dará ao artesão todas as permissões de que precisa e também não causará problemas de segurança.

então, em vez de iniciar o serviço artesanal com:

$ php artisan serve

tente usar:

$ sudo php artisan serve 

assim, você não terá que fazer nenhuma alteração de permissão

Esqueleto
fonte
-5

Eu tenho o mesmo problema, acabei de alterar a permissão do diretório app / storage para 775 com a linha de comando chmod

Caio Cutrim
fonte
5
Isso já está apontado na resposta aceita atualmente (e seria necessário que as informações dessa resposta sobre como definir o grupo do diretório corretamente para ser uma resposta totalmente correta.)
Matt Gibson