Obteniendo un error interno del servidor 500 en Laravel 5+ Ubuntu 14.04


85

He instalado Laravel muchas veces en el sistema operativo Windows, pero nunca ocurrió este tipo de problema. Este servidor interno 500 generalmente ocurre cuando su módulo "mod_rewrite" no está encendido.

Sin embargo, en Ubuntu 14.04 este problema me está dando dolor de cabeza. He instalado rewrite_mod pero tampoco funciona. He dado acceso a todas mis carpetas y archivos dentro, es decir.

/ var / www / html / laravel_project

Todavía no funciona. También se cambió .htaccess del original a este.

    +FollowSymLinks
RewriteEngine On

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

También tengo todas las extensiones necesarias para Laravel 5+. ¿Queda algo que no hice?


5
así que revise su registro de errores para ver detalles sobre el 500. hasta que sepa que lo tiene, no tiene sentido revolverse por todos lados.
Marc B

2
¿Por qué solo tiene +FollowSymLinksen la parte superior? Debería ser Options +FollowSymLinks.
Mike Rockétt

1
"He instalado rewrite_mod pero ..." - ¿y he permitido el acceso apropiado para .htaccess AllowOverrideen la configuración de su servidor?
MrWhite

@MikeRockett Recientemente eliminé las "Opciones" cuando las mantengo, el navegador se queda en blanco y cuando no las mantiene, el navegador devuelve un error de solicitud 500, pero en ambos casos el navegador devuelve un error 500. !
DpEN

1
@MikeRockett .. Eliminé el "/../" del archivo index.php y probé y mostré diferentes errores de permisos de archivo y luego chmod y establecí permisos de lectura / escritura y funcionó. Gracias por la ayuda hermano !!
DpEN

Respuestas:


214

Finalmente superó el problema

  • No era el archivo .htaccess el problema ni el index.php. El problema estaba en acceder a los archivos y requerir permisos.

Para resolver el problema ejecuté los siguientes comandos a través de la terminal.

sudo chmod -R 755 laravel_blog

y luego escriba a continuación para permitir que laravel escriba el archivo en la carpeta de almacenamiento

chmod -R o+w laravel_blog/storage

Estos dos comandos resolvieron el problema.


1
Gracias, tuve este problema al instalar laravel en una nueva distribución de ubuntu 14.04 en el motor de cálculo de Google, esto lo resolvió.
Alex

1
Gracias por esto. Esto solucionó el problema tanto en ubuntu como en mac.
Arunabh Das

2
este es un muy mal consejo, el chmod establece todos los archivos en + x. Supongo que querías hacerlo para directorios, en cuyo caso usarías find.
MightyPork

¿Dónde debo cd (cambiar de directorio) para ejecutar ese comando?
Anastasie Laurent

1
Necesitas muchas cookies. Funcionó bien en la instalación LAMP Ubuntu 16.04 de Digital Ocean.
Abhishek Saini

71

Cree el archivo .env y también ejecute:

php artisan key:generate

Esto funcionó para mí después de sacar un proyecto de git.

Después de crear el archivo .env y generar la clave, ejecute el siguiente código:

php artisan cache:clear 
php artisan config:clear

3
Esto funcionó para mí. No cometa un error de novato, después de instalar el proyecto laravel, asegúrese de cambiar el nombre de .env.example a .env o php artisan key: generate fallará
Armin

OK, ¿esto es algo nuevo? Primera vez que se encuentra con este problema
Robert Rocha

1
php artisan cache:clear php artisan config:clearestá trabajando para mi caso
Nurkartiko

27

Después de instalar ejecutar el comando debajo

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

aquí "laravel" es el nombre del directorio donde se instaló laravel


con este comando asegúrese de ejecutar el comandocomposer install
Iftikhar Ali Ansari

sudo chmod -R 755 laravella ubicación de la -R es incorrecta
Hïkmãt Iskandar

20

Intente verificar si tiene .envfile.

Sobre todo esto puede causar algo así. Intente crear un archivo, luego copie todo desde .env.example, péguelo en su archivo creado y asígnele un nombre .env. o simplemente cambie el nombre del .env.examplearchivo a .envy ejecutephp artisan key:generate


esta ayuda en el primer intento +
AZinkey

14

Asegúrese de que exista un archivo .env, que contenga una APP_KEY , en la raíz.

Lo que debería estar en el .env no se ha indicado explícitamente en otras soluciones, y pensé que lo reduciría a la oración anterior.

Esto solucionó mi error 500 en una instalación nueva de Laravel.

Pasos:

  1. Cree un archivo .env en la raíz (por ejemplo touch .env)
  2. Asegúrese de que contenga al menos una línea: APP_KEY=
  3. Genere una clave de aplicación en la terminal: php artisan key:generate

Notas:

  • Mi instalación particular no incluía ningún .env en absoluto (ejemplo o no)

  • Simplemente tener un .env en blanco no funciona.

  • Un .env que contiene parámetros, pero no un APP_KEYparámetro, no funciona.

¿Error ?: Al generar una clave de aplicación en la terminal, puede informar como exitosa, sin embargo , ninguna clave se colocará en el .env si el archivo no tiene una APP_KEY=línea preexistente .

Como referencia, aquí está el .env oficial con parámetros de referencia útiles. Copie y pegue lo que necesite:

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


12

Me he enfrentado a un error similar. Revisé el inicio de sesión /var/log/apache2/error.logy encontré una excepción UnexpectedValueException

Cambié el propietario a mi usuario apache de la carpeta de almacenamiento en el directorio del proyecto.

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

En mi caso, el propietario del proceso apache2 es www-data, así que cámbielo por el suyo, esto se puede encontrar en el archivo de configuración apache2. Espero que esto te sea útil.


12

Lo arreglé con 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

Que reiniciar un servidor o XAMPP u otro y eso debería estar funcionando.


3
777 es un comando muy malo y le dará acceso de ESCRITURA a cualquier persona en Internet. 644 es más recomendable.
Zac Grierson

9

Puede otra solución a este problema:

Instale los paquetes necesarios ejecutando el comando composer desde la raíz del proyecto:

sudo composer install

ACTUALIZAR:

  • No debe ejecutar este comando en un servidor de producción, pero algunos problemas con el compositor se pueden resolver con esto en entornos locales.

EDITAR:


1
¿Qué diablos es esto? ¿Sabes realmente lo que estás respondiendo?
Jimmy Obonyo Abor

3
@JimmyObonyoAbor En realidad esto está funcionando. Según los registros, el 500 se debió a que faltaban algunos archivos en / vendor. ¿Cómo arreglas eso? Ejecutando composer install / update. Gracias y upvote, Christos Papoulas
tomsihap

5
Creo que ejecutar ese comando con sudo es un potencial agujero de seguridad
Shay

5

Tenía PHP 7.0 y PHP 7.1 instalados y estaba usando PHP 7.1 en la línea de comandos y PHP 7.0 estaba habilitado en Apache, ese desorden puede traer problemas cuando usa Laravel Framework y localhost Apache2 con laravel.

Primero verifique su archivo de redacción para ver su versión de PHP.

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

Verifique su versión actual de php en la línea de comandos

php -v

Verifique su versión de php actualmente habilitada en Apache, lo hice usando el navegador.

http://localhost

Si no es lo mismo, desactive la versión actual y active la más reciente.

sudo a2dismod php7.2

sudo a2enmod php7.1

sudo service apache2 restart

Después de eso, cambie los permisos de la carpeta

sudo chmod 755 -R blog

para carpeta de almacenamiento

chmod -R o+w blog/storage

5

Un problema frecuente al usar git:

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

Resolvió esto agregando manualmente un archivo .env en el servidor o cargándolo a través de FTP


4

A veces hay problemas con la versión de php. Necesitamos cambiar la versión de php del servidor. Simplemente escriba debajo de la cadena en el archivo .htaccess :

AddHandler application/x-httpd-php5 .php

3

Primero, permita todos los permisos para la carpeta de su proyecto (digamos que se llama laravel), para la subcarpeta de almacenamiento y su subcarpeta de registros y para la subcarpeta del proveedor (laravel / almacenamiento, laravel / almacenamiento / registros y laravel / proveedor).

Luego verifique si tiene un archivo .env; de lo contrario, puede ejecutar:

$ mv .env.example .env

para cambiar el nombre de su .env.example incorporado al .env necesario.

De lo contrario, active el modo de depuración: abra .env y configure

APP_DEBUG=true

y abra laravel / config / app.php y cambie

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

a

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

para que pueda averiguar cuál es el motivo de su error.


4
No hay ninguna razón por la que deba editar config / app.php de esa manera. El negaría todo el propósito del archivo .env.
Nathan

Recibía errores de servicio interno cuando ejecuté mi aplicación laravel en mi servidor de prueba (en modo de producción). Establecer APP_DEBUG = true me permitió ver los detalles del error, por lo que pude encontrar y solucionar el problema.
Debbie V

3

Ejecute estos dos comandos en el directorio donde está instalado Laravel:

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

Luego borre la caché y descargue la carga automática:

php artisan cache:clear
composer dump-autoload

3

Me he enfrentado a este problema muchas veces. Pruebe uno de estos pasos, me ayudó mucho. Quizás también te ayude.

  1. En primer lugar, compruebe los permisos de sus archivos.
  2. Para arreglar los permisos de archivo sudo chmod 755 -R your_project
  3. Luego chmod -R o + w your_project / storage para escribir el archivo en la carpeta de almacenamiento.
  4. php artisan cache: clear
    composer dump-autoload
  5. php clave artesanal: generar
  6. Luego, verifique los requisitos del servidor según el requisito de laravel.
  7. Muchas veces recibiste este error debido a la versión php . Intente cambiar su versión de php en cpanel.
  8. Luego configure su archivo .htaccess correctamente

3

Leo todos los comentarios y sugerencias. 500 - El CÓDIGO DE ERROR HTTP representa un error interno del servidor.

Razones de este error:

  • Hay una causa principalmente debido a problemas de permisos.
  • Variables de entorno no encontradas o .envarchivo no encontrado en su directorio raíz
  • Problema de extensiones PHP
  • Problema de la base de datos

Reparar:

  • Establezca los permisos correctos:
    • Ejecute estos 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
  • Si el archivo .env no existe, cree uno touch .envy pegue las variables de entorno y luego ejecute
   php artisan key:generate
   php artisan cache:clear
   php artisan config:clear
   composer dump-autoload
  • Verifique su archivo php.ini y descomente las extensiones que necesita (en algunos casos, debe instalar la extensión ejecutando este comando apt-get install php7.2-[extension-name]
  • Verifique las credenciales y los valores de su base de datos en el .envarchivo. Y otorgue permisos al usuario de la base de datos para esa base de datos.

Estos son algunos problemas comunes que probablemente enfrentará al implementar su aplicación laravel y cuando comience a obtener todos estos comandos, le sugiero que cree un script que le ahorrará tiempo.


2

Si usa vagrant, intente esto:

Primero elimine config.php en current / vendor.

Ejecute este comando:

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

NO EJECUTE php artisan config: cache.

Espero que esto ayude.


1

Ejecute estos dos comandos en la raíz de laravel

buscar * -type d -print0 | xargs -0 chmod 0755 # para directorios

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


1

Tengo un problema similar con un host compartido. Estaba teniendo un error 500. Lo solucioné comprobando la versión de Laravel y la versión de PHP. El error fue porque Laravel 5.6 no se ejecuta en PHP 7.0.x Una vez que sé esto, simplemente reconfiguro el proyecto a Laravel 5.5 que es compatible con PHP 7.0.x ahora todo está bien. Otra razón por la que tengo problemas a veces es el FTP. Tengo archivos dañados y tengo que cargar el proyecto más de una vez. Espero que esto ayude en el futuro. No encontré tanta información en este tema.


1

Para aquellos de ustedes que como yo todavía tienen errores después de probar todas las otras respuestas:

Verifique la versión de php apache que usa, el último laravel solo funciona con php7.1. Entonces tienes que:

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

espero que esto ayude


1

si está en un servidor en vivo, intente esto

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

luego también asegúrese de que la versión php en su composer.json sea la misma que la de su servidor.

Verifique su versión de php en su terminal usando php -v


1

Asegúrese de haberlo ejecutado composer updateen la instancia de su servidor.


1

Primero, si no hay un archivo .env en su repositorio de laravel. Copie y pegue el archivo .env.example y cámbiele el nombre a .env. luego abra el archivo .env y en la parte de la base de datos proporcione la descripción de su base de datos. Ejecutar: php artisan key: generar php artisan cache: borrar php artisan config: cache php artisan config: clear composer dump-autoload php artisan serve


0

Según los 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

Hay algunos errores al abrir archivos en la carpeta / vendor.

Al instalar y actualizar a través del compositor, finalmente pude resolver el problema.

sudo composer install
sudo composer update

0

Asegúrese de que la carpeta de almacenamiento con escritura previa (chmod o + w) funcione para mí como un encanto.



0

Me enfrenté a este problema y lo solucioné actualizando mi versión php en apache hasta 5.6.x


0

Solo cambie el permiso de la carpeta web a través de este comando:

sudo chmod 755 -R your_folder


0

Acabo de ejecutar el siguiente comando:

php artisan passport:install

Estaba usando Passport para ejecutar mi aplicación completamente basada en API y Vue.js. Laravel funcionó bien, pero cada vez que intentaba iniciar sesión a través de mi API, obtenía el error. Después de ejecutar el comando y actualizar el client_id y client_secret en mis archivos de Laravel y luego enviar las nuevas actualizaciones al servidor en vivo, el problema se resolvió. En mi modelo de usuario tengo un script de la siguiente manera:

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);
}

Acabo de actualizar el client_id y client_secret y luego los guardé. Dado que el comando de pasaporte le da dos claves de cliente:

1) Cliente de acceso personal (client_id y client_secret)

2) Cliente de concesión de contraseña (client_id y client_secret)

Usé el cliente de concesión de contraseña. Espera que esto ayude a alguien :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.