Obtendo um erro interno de servidor 500 no Laravel 5+ Ubuntu 14.04


88

Já instalei o Laravel várias vezes no sistema operacional Windows mas nunca ocorreu esse tipo de problema. Este servidor interno 500 geralmente ocorre quando o módulo "mod_rewrite" não está ligado.

Porém, no Ubuntu 14.04 esse problema está me dando dor de cabeça. Instalei rewrite_mod, mas também não está funcionando. Eu dei acesso a todas as minhas pastas e arquivos dentro, ou seja,

/ var / www / html / laravel_project

Ainda não funciona. .Htaccess alterado também de original para este.

    +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Também tenho todas as extensões necessárias para o Laravel 5+. Resta alguma coisa que eu não fiz?


5
portanto, verifique seu log de erros para ver os detalhes sobre o 500. até saber que tem isso, não há motivo para ficar se debatendo por todo o lugar.
Marc B de

2
Por que tem apenas +FollowSymLinksno topo? Deve ser Options +FollowSymLinks.
Mike Rockétt

1
"Eu instalei rewrite_mod, mas ..." - e permiti o acesso apropriado para .htaccess com AllowOverrideem sua configuração de servidor?
MrWhite

@MikeRockett i removeu recentemente as "Opções" ao mantê-lo, o navegador fica em branco e quando não o mantém, o navegador retorna um erro de solicitação 500, mas em ambos os casos o navegador está retornando o erro 500. !
DpEN

1
@MikeRockett .. Eu removi o "/../" do arquivo index.php e tentei e mostrei diferentes erros de permissões de arquivo e então chmod e configurei permissões de leitura / gravação e funcionou !!! Obrigado pela ajuda mano !!
DpEN

Respostas:


215

Finalmente superou o problema

  • O problema não era o arquivo .htaccess, nem o index.php. O problema estava em acessar os arquivos e exigir permissões.

Para resolver o problema, executei os seguintes comandos no terminal.

sudo chmod -R 755 laravel_blog

e digite abaixo para permitir que o laravel grave o arquivo na pasta de armazenamento

chmod -R o+w laravel_blog/storage

Esses dois comandos resolveram o problema.


1
Obrigado, eu tive esse problema ao instalar o laravel em uma nova distribuição do ubuntu 14.04 no google compute engine, isso resolveu.
Alex

1
Obrigado por isso. Isso corrigiu o problema no ubuntu e no mac.
Arunabh Das

2
este é um conselho muito ruim, o chmod define todos os arquivos como + x. Presumo que você queira fazer isso para diretórios e, nesse caso, use find.
MightyPork de

onde devo fazer o cd (alterar o diretório) para executar esse comando?
Anastasie Laurent

1
Você precisa de muitos cookies. Funcionou bem no LAMP Ubuntu 16.04 Instalação do Digital Ocean.
Abhishek Saini

75

Crie o arquivo .env e execute também:

php artisan key:generate

Isso funcionou para mim depois de puxar um projeto git.

Depois de criar o arquivo .env e gerar a chave, execute o código abaixo:

php artisan cache:clear 
php artisan config:clear

3
Isso funcionou para mim. Não cometa um erro noob, depois de instalar o projeto laravel certifique-se de renomear .env.example para .env ou chave php artisan: o generate irá falhar
Armin

OK, isso é uma coisa nova? Encontrando este problema pela primeira vez
Robert Rocha

1
php artisan cache:clear php artisan config:clearestá trabalhando para o meu caso
Nurkartiko

27

Depois de instalar, execute o comando abaixo

sudo chmod 755 -R laravel
chmod -R o+w laravel/storage

aqui "laravel" é o nome do diretório onde o laravel foi instalado


com este comando certifique-se de executar o comandocomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravela localização do -R está errada
Hïkmãt Iskandar

22

Tente verificar se você tem .envarquivo.

Principalmente, essa coisa pode causar algo assim. Tente criar um arquivo, copie tudo de .env.example, cole-o no arquivo criado e nomeie-o .env. ou simplesmente renomeie o .env.examplearquivo para .enve executephp artisan key:generate


esta ajuda na primeira tentativa +
AZinkey

15

Certifique-se de que existe um arquivo .env, contendo uma APP_KEY , na raiz.

O que deveria estar no .env não foi explicitamente declarado em outras soluções, e pensei em resumir na frase acima.

Isso corrigiu meu erro 500 em uma nova instalação do Laravel.

Passos:

  1. Crie um arquivo .env na raiz (por exemplo touch .env)
  2. Certifique-se de que contém pelo menos uma linha: APP_KEY=
  3. Gere uma chave de aplicativo no terminal: php artisan key:generate

Notas:

  • Minha instalação particular não incluiu nenhum .env (exemplo ou outro)

  • Simplesmente ter um .env em branco não funciona.

  • Um .env contendo parâmetros, mas nenhum APP_KEYparâmetro, não funciona.

Bug ?: Ao gerar uma chave de aplicativo no terminal, ele pode relatar como bem-sucedido, no entanto , nenhuma chave será realmente colocada no .env se o arquivo não tiver uma APP_KEY=linha pré-existente .

Como referência, aqui está o .env oficial com parâmetros de linha de base úteis. Copie e cole o que você precisa:

https://github.com/laravel/laravel/blob/master/.env.example


12

Eu enfrentei um erro semelhante. Eu verifiquei o login /var/log/apache2/error.loge encontrei um UnexpectedValueException

Mudei o proprietário para o meu usuário apache da pasta de armazenamento no diretório do projeto.

sudo chown -R www-data:www-data ./storage

No meu caso, o proprietário do processo apache2 é www-data, então mude para o seu, ele pode ser encontrado no arquivo de configuração do apache2. Espero que isso seja útil para você.


12

Consertei com este comando:

   rm -rf app/storage/logs/laravel.logs
   chmod -R 777 app/storage,
   php artisan cache:clear,
   php artisan dump-autoload OR composer dump-autoload

Depois reinicie um servidor XAMPP ou outro e que deve estar funcionando.


3
777 é um comando muito ruim e dará acesso de GRAVAÇÃO a qualquer pessoa na Internet. 644 é mais aconselhável.
Zac Grierson

9

Pode outra solução para este problema:

Instale os pacotes necessários executando o comando composer a partir da raiz do projeto:

sudo composer install

ATUALIZAR:

  • Você não deve executar este comando em um servidor de produção, mas alguns problemas com o composer podem ser resolvidos com isso em envs locais.

EDITAR:


1
O que diabos é isso, você realmente sabe o que está respondendo!
Jimmy Obonyo Abor

3
@JimmyObonyoAbor Na verdade, isso está funcionando. De acordo com os logs, o 500 foi porque alguns arquivos em / vendor estavam faltando. Como você conserta aquilo ? Executando a instalação / atualização do composer. Obrigado e
voto positivo

5
Acredito que executar esse comando com sudo é uma falha de segurança em potencial
Shay

5

Eu tinha o PHP 7.0 e o PHP 7.1 instalados e estava usando o PHP 7.1 na linha de comando e o PHP 7.0 estava habilitado no Apache, isso bagunçado pode trazer problemas quando você está usando Laravel Framework e localhost Apache2 com laravel.

Verifique seu arquivo composer primeiro para ver sua versão do PHP.

"php": "^7.1.3",
"laravel/framework": "5.6.*",

Verifique a sua versão atual do php na linha de comando

php -v

Verifique sua versão de php habilitada no Apache, eu fiz usando o navegador.

http://localhost

Se não for o mesmo, desative a versão atual e ative a mais recente.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Depois disso, altere as permissões da pasta

sudo chmod 755 -R blog

para pasta de armazenamento

chmod -R o+w blog/storage

5

Um problema frequente ao usar o git:

Laravel's .gitignore ignores the .env file which when missing generates this error

Resolvido isso adicionando manualmente um arquivo .env no servidor ou enviando-o por FTP


4

Às vezes, há problemas com a versão php. Precisamos mudar a versão php do servidor. Basta escrever a string abaixo no arquivo .htaccess :

AddHandler application/x-httpd-php5 .php

4

Eu li todos os comentários e sugestões. 500 - CÓDIGO DE ERRO HTTP representa um erro interno do servidor.

Razões para este erro:

  • Principalmente devido a problemas de permissão
  • Variáveis ​​de ambiente não encontradas ou .envarquivo não encontrado em seu diretório raiz
  • Problema de extensões PHP
  • Problema de banco de dados

Consertar:

  • Defina as permissões corretas:
    • Execute esses comandos (Ubuntu / Debian)
find /path/to/your/root/dir/ -type f -exec chmod 644 {} \;
find /path/to/your/root/dir/ -type d -exec chmod 755 {} \;

chown -R www-data:www-data /path/to/your/root/dir/

chgrp -R www-data storage bootstrap/cache
chmod -R ug+rwx storage bootstrap/cache
  • Se o arquivo .env não existir, crie um por touch .enve cole suas variáveis ​​de ambiente e execute
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Verifique o seu arquivo php.ini e descomente as extensões que você precisa (em alguns casos você terá que instalar a extensão executando este comando apt-get install php7.2-[extension-name]
  • Verifique as credenciais e os valores do seu banco de dados no .envarquivo. E conceda permissões ao usuário do banco de dados para esse banco de dados.

Esses são alguns problemas comuns que você provavelmente enfrentará ao implantar seu aplicativo laravel e quando começar a receber todos esses comandos, sugiro que você faça um script que economizará seu tempo.


3

Primeiro, conceda todas as permissões para a pasta do seu projeto (digamos que seja chamada laravel), para a subpasta de armazenamento e sua subpasta de logs e para a subpasta do fornecedor (laravel / armazenamento, laravel / armazenamento / logs e laravel / fornecedor).

Em seguida, verifique se você tem um arquivo .env - caso contrário, você pode executar:

$ mv .env.example .env

para renomear seu .env.example integrado para o .env necessário.

Caso contrário, ative o modo de depuração - abra .env e defina

APP_DEBUG=true

e abra laravel / config / app.php e mude

'debug' => env('APP_DEBUG', false), 

para

'debug' => env('APP_DEBUG', true),

para que você possa descobrir qual é o motivo do seu erro.


4
Não há nenhuma razão para você editar config / app.php dessa forma. Isso negaria todo o propósito do arquivo .env.
Nathan

Eu estava recebendo erros de serviço interno quando executei meu aplicativo laravel em meu servidor de teste (no modo de produção). Definir APP_DEBUG = true me permitiu ver os detalhes do erro, para que eu pudesse localizar e corrigir o problema.
Debbie V

3

Execute estes dois comandos no diretório onde o Laravel está instalado:

sudo chmod 755 -R DIRECTORY_NAME
chmod -R o+w DIRECTORY_NAME/storage

Em seguida, limpe o cache e descarte o carregamento automático:

php artisan cache:clear
composer dump-autoload

3

Já enfrentei esse problema muitas vezes. Experimente uma dessas etapas que me ajudou muito. Talvez também te ajude.

  1. Em primeiro lugar, verifique as permissões do arquivo.
  2. Para corrigir as permissões de arquivo, sudo chmod 755 -R your_project
  3. Então chmod -R o + w your_project / storage para gravar o arquivo na pasta de armazenamento.
  4. cache do php artisan: clear
    composer dump-autoload
  5. chave php artisan: gerar
  6. Em seguida, verifique os requisitos do servidor de acordo com o requisito laravel.
  7. Muitas vezes você obteve este erro por causa da versão do php . Tente mudar sua versão do php no cpanel.
  8. Em seguida, configure seu arquivo .htaccess corretamente

2

Se você usa o vagrant, tente isto:

Primeiro remova config.php em / vendor atual.

Execute estes comandos:

php artisan config:clear
php artisan clear-compiled
php artisan optimize

NÃO EXECUTE php artisan config: cache.

Espero esta ajuda.


1

Execute esses dois comandos na raiz do laravel

find * -tipo d -print0 | xargs -0 chmod 0755 # para diretórios

encontrar . -tipo f -print0 | xargs -0 chmod 0644 # para arquivos


1

Eu tenho um problema semelhante com um host de compartilhamento. Eu estava tendo 500 erros. Acabei de consertar verificando a versão do Laravel e a versão do PHP. O erro foi porque o Laravel 5.6 não roda no PHP 7.0.x Depois de saber disso, acabei de reconfigurar o projeto para o Laravel 5.5 que é compatível com o PHP 7.0.x agora está tudo certo. Outra razão que às vezes tenho problemas é o FTP, eu obtenho arquivos corrompidos e preciso carregar o projeto mais de uma vez. Espero que isso ajude no futuro. Não encontrei tantas informações neste tópico.


1

Para aqueles que gostam de mim, ainda têm erros depois de tentar todas as outras respostas:

Verifique a versão do php que o apache usa, o último laravel só funciona com o php7.1. Então você tem que:

sudo a2dismod php[yourversion]
sudo a2enmod php7.1
sudo systemctl restart apache2

espero que isto ajude


1

se estiver em um servidor ativo, tente isso

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /


# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

em seguida, certifique-se também de que a versão php em composer.json é a mesma do seu servidor.

Verifique sua versão php em seu terminal usando php -v


1

Certifique-se de ter executado composer updateem sua instância do servidor.


1

Primeiro, se não houver um arquivo .env em seu repositório laravel. Copie e cole o arquivo .env.example e renomeie-o para .env. em seguida, abra o arquivo .env e, na parte do banco de dados, forneça a descrição do banco de dados. Executar: php artisan key: gerar php artisan cache: limpar php artisan config: cache php artisan config: limpar composer dump-autoload php artisan servir


0

De acordo com os registros:

[06-Feb-2016 22:38:48 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:38:48 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Warning:  require(/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17
[06-Feb-2016 22:43:37 Europe/Berlin] PHP Fatal error:  require(): Failed opening required '/Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/../vendor/autoload.php' (include_path='.:/Applications/MAMP/bin/php/php7.0.0/lib/php') in /Users/tomsihap/Documents/Development/mamp/partie_1_exo/bootstrap/autoload.php on line 17

Existem algumas falhas ao abrir arquivos na pasta / vendor.

Ao instalar e atualizar via composer, finalmente consegui resolver o problema.

sudo composer install
sudo composer update

0

Certifique-se de que a pasta de armazenamento com previlégio de gravação (chmod o + w) funcione para mim como um encanto.



0

Eu enfrentei esse problema e resolvi atualizando minha versão do php no apache para 5.6.x


0

Só altere a permissão da pasta da web por meio deste comando:

sudo chmod 755 -R your_folder


0

Acabei de executar o seguinte comando:

php artisan passport:install

Eu estava usando o passaporte para executar meu aplicativo totalmente baseado em APIs e Vue.js. O Laravel funcionava bem, mas toda vez que eu tentava fazer o login através da minha API, eu recebia o erro. Depois de executar o comando e atualizar o client_id e client_secret em meus arquivos do Laravel e enviar as novas atualizações para o servidor ativo, o problema foi resolvido. No meu modelo de usuário, tenho um script da seguinte maneira:

public function generateToken($request)
{
    $http = new \GuzzleHttp\Client();
    $response = $http->post(URL::to('/').'/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '6',
            'client_secret' => 'x3yhgWVqF8sSaMev4JI3yvsVxfbgkfRJmqzlpiMQ',
            'username' => $this->email,
            'password' => $request->input('password'),
            'scope' => '',
        ],
    ]);
    //  Lets get an array instead of a stdObject so that we can return without errors
    $response = json_decode($response->getBody(), true);

    return oq_api_notify([
                'auth' => $response,                                        //  API ACCESS TOKEN
                'user' => $this->load(['settings'])->toArray(),
            ], 201);
}

Acabei de atualizar o client_id e o client_secret só depois salvei. Já que o comando passport fornece duas chaves de cliente:

1) Cliente de acesso pessoal (client_id & client_secret)

2) Cliente de concessão de senha (client_id & client_secret)

Usei o cliente de concessão de senha. Espera que isso ajude alguém lá fora :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.