Tareas adicionales en la instalación de Laravel 5 y problemas comunes

  • Por
  • PHP
Para completar la instalación tienes que realizar unas tareas adicionales, en muchos casos, así como resolver problemas comunes.

En el artículo anterior del Manual de Laravel ya explicamos cómo realizar la instalación de básica del framework PHP Laravel 5. Como has podido comprobar, instalar Laravel es muy fácil, pero en la mayoría de los casos habrá que completar algunas tareas básicas para dejarlo funcionando correctamente en nuestro sistema. En este artículo pretendemos ayudar explicando cuáles son esas posibles tareas, a la par que analizamos los problemas que te puedes encontrar durante la instalación.

Obviamente sería imposible recabar todos los tipos de problemas con los que te puedes encontrar cuando estés instalando Laravel 5, porque dependen de la configuración concreta del sistema donde lo vayamos a instalar. No obstante, vamos a hacer un listado de cosas que pueden fallar en este momento, en base a nuestra experiencia.

El temido enemigo en este caso es el mensaje "Whoops, looks like something went wrong.", que en la mayoría de los casos, en modo desarrollo, te debería advertir qué es lo que está funcionando mal. A partir de ese mensaje deberías encontrar la pista para saber como solucionar tu problema particular.

Nota: Además, recuerda que se recomienda instalar Laravel, al menos durante la etapa de desarrollo, sobre Homestead y ya con eso eliminaremos la mayoría de las fuentes comunes de problemas, ya que partes de una máquina virtual que tiene todo lo necesario para que Laravel funcione sin problemas.

Ahora van algunas de las posibles causas y soluciones de problemas que hemos detectado.

Archivo de entorno inexistente

Hemos observado que si instalas Laravel 5 a partir del instalador (laravel new nombre_proyecto) no se crea el archivo de entorno. Ese es un archivo que está en la raíz del proyecto, que se llama ".env".

Fíjate que en la carpeta raíz debería haber un archivo llamado .env.example. Ese archivo es un ejemplo de configuración. La solución sería simplemente duplicar el archivo y llamarle ".env".

Atención aquí a la variable de entorno APP_DEBUG, que debería estar a "true" para que te de una descripción completa de los errores que se puedan producir al ejecutar Laravel. Si no está el archivo de la configuración del entorno, o dentro de él APP_DEBUG está a false, verás que el mensaje de error de Laravel no aparece con descripción detallada.

Como alternativa, via Composer también se puede acceder a la creación de este archivo de configuración del entorno. Si te fijas en el composer.json hay una sección de scripts que sirven para correr comandos post-instalación. Entre ellos hay uno que hace justamente la copia del .env.example al .env. El script se llama "post-root-package-install". Para ejecutarlo con Composer lanzamos el comando siguiente:

composer run-script post-root-package-install

Nota: Todas las variables de entorno se pueden acceder via $_ENV que es una variable PHP superglobal, que mediante un array asociativo te permite acceder sus elementos. Hay un helper llamado "env" que justamente está para facilitarte el acceso a las variables de entorno sin usar la superglobal de PHP. Por ejemplo env('APP_DEBUG') te daría el valor de la variable de entorno APP_DEBUG. Puedes verlo en funcionamiento en el archivo config/app.php.

Permisos de las carpetas

Otra situación que puede dar lugar a errores es que no tengas permisos de escritura en las carpetas que lo necesitan. Directorios dentro de "storage" y "bootstrap/cache" deben tener permisos de escritura para el servidor web. Si has instalado Laravel en una máquina Homestead no deberías preocuparte por este detalle, pero si lo estás haciendo en una máquina distinta quizás tengas que activarlos.

Como estamos en el ordenador de desarrollo podríamos simplemente asignar 777 a los permisos y así nos aseguramos que no nos de problemas este detalle.

chmod -R 777 storage

Este asunto está documentado en la documentación oficial, aunque no sugieren poner los permisos a un valor concreto. Nosotros sugerimos solo 777 porque es tu máquina local, nunca se debería hacer eso en el servidor remoto donde va a estar la aplicación en producción.

Llave de aplicación (Application Key)

En el caso de la instalación via el instalador de Laravel 5 también hemos observado que falta la llave de aplicación. En la documentación oficial menciona que esa llave debería haberse generado, tanto instalando con el instalador de Laravel (laravel new) como via Composer con la alternativa tradicional. Via composer sí se generó la llave, pero no via el instalador.

La solución es sencilla porque mediante el comando de Artisan key:generate se realiza todo el trabajo para ti.

Nota: Ojo, porque la llave se genera en el archivo de entorno .env y si ese archivo no existe quizás no funcione el comando de Artisan key:generate. Lee el punto anterior "Archivo de entorno inexistente" para encontrar más información.

Dentro de la raíz de tu proyecto, donde se encuentra el .env lanza el comando:

php artisan key:generate

Eso te debería lanzar algo como la siguiente salida:

Application key [dpGvjrnnKLGszdgcck1YSLrSMGeN61dy] set successfully.

Además el propio comando te actualiza el archivo .env, pero si no es así podrías hacerlo a mano tú mismo, en el epígrafe APP_KEY:

APP_KEY=dpGvjrnnKLGszdgcck1YSLrSMGeN61dy

Como nos avisan en la documentación, ten cuidado con este detalle porque si la llave de aplicación no ha sido generada los datos de las sesiones de usuario y otras informaciones encriptadas no estarán seguras.

Revisar config/app.php

En este archivo encontrarás información de configuración de la aplicación. Generalmente no necesitas tocarlo si estás impaciente y quieres ver ya el framework funcionando. Sin embargo encontrarás algunas cosas útiles como la variable "timezone" y "locale" que en una aplicación en producción desearás editar.

Otros elementos que se pueden configurar en otros archivos son Chache, Database, Session, que veremos más adelante.

URLs amigables a usuarios / buscadores

Laravel es capaz de mostrar las URL de aplicación de una manera amistosa para el usuario, y para los buscadores que puedan recorrer la página. Todo en Laravel comienza con un index.php que está dentro de la carpeta "public" (que debería ser tu document root). Para eliminar ese index.php de las URL y que éstas queden más limpias es posible que necesites tocar alguna cosa. Aunque si estás instalando via Homestead no deberías encontrarte con ningún problema en este sentido.

Laravel 5 viene con un archivo .htaccess que sirve para generar las URL amigables en Apache. Solo ten en cuenta que tu apache debe tener activado el mod_rewrite para que las redirecciones de .htaccess funcionen correctamente.

Además del .htaccess que encuentras en la carpeta "public" en la documentación de Laravel, en la sección de instalación http://laravel.com/docs/#installation y luego en la subsección "Pretty URL" te ofrecen una versión reducida del .htaccess que podrías probar si la que provee el framework no hace correctamente su trabajo.

Para los que están en Nginx se debe agregar una directiva en la configuración del sitio:

location / { try_files $uri $uri/ /index.php?$query_string; }

Esto es todo por el momento. Si queréis profundizar en el tema os recomendamos que os veáis los vídeos que encontraréis en el siguiente enlace: Primeros pasos con Laravel 5

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Pedro

24/8/2015
Sobre los cambios en Laravel 5.1 respecto a Laravel 5
Hola:

Siguiendo los tutoriales de Laravel (instalación, configuración, estructura de carpetas) y el último curso impartido a través de escuela.it, me estoy dando cuenta de que el Laravel tratado en dichos artículos o videos es el Laravel 5. Mientras que el ya último oficial desde hace poco tiempo es el Laravel 5.1. Y lo que cabe reseñar es que ya existen ciertas diferencias, por lo que hay ciertas cosas que se mencionan en dichos apartados ya no es así.

Por ejemplo, parece que en la versión 5 de Laravel, venía montado por defecto un sistema básico de autentificación y registro de usuarios. Pero en la versión 5.1 ese sistema ya no existe y, según la documentación oficial, hace falta construirlo manualmente. También, parece que el Bootstrap tampoco viene incluido y hubiera que descargarlo vía Composer. O que ciertas carpetas de la aplicación hubieran cambiado.
Todo esto sería merecedor de otro artículo o hangout que mencionara o explicara todas las cosas nuevas de una versión respecto a la otra para evitar la confusión de todo el que trate estos artículos o videos y se descargase la última versión disponible de Laravel como es la 5.1, y no ya la 5.

Gracias y saludos.

midesweb

08/9/2015
Laravel 5.1
Yo para escribir el manual estoy usando la versión 5.1 de Laravel, por lo que no habría problemas con cosas que puedan haber cambiado. En el curso de Laravel 5 que dimos en EscuelaIT con Carlos, a mitad de curso cambiaron a Laravel 5.1 y el curso se actualizó sobre la marcha para tratar siempre la versión más nueva.

Con respecto al tema de login de usuarios, es cierto, en Laravel 5.1 lo quitaron. Sin embargo, permanecen varios de los elementos que necesitas para poder instalarlo, como las migraciones de la tabla de usuarios y la tabla de "password_updates", así como el modelo de usuarios (Users). En las clases finales del curso estuvimos viendo un proyecto completo realizado en Laravel 5.1 y tenía sistema de login. Supongo que a partir de esas clases lo tendrás solucionado, si no, simplemente descargar el código de github.

Estoy en contacto con Carlos para pedirle más hangouts de Laravel en #laravelIO :)

midesweb

08/9/2015
5.1 hablando con Carlos
Hablando ahora con Carlos me dice que recuerda que eso de reinstalar el sistema de Login de Laravel para la 5,1 se vio en algún momento del curso. Saludos!

MarcoAstur

07/11/2015
Siguiendo el Manual
Hola,
En primer lugar, enhorabuena y gracias por el magnífico trabajo realizado desde hace ya unos cuantos años y que algunos seguimos en silencio para aprender cada día algo nuevo. Estoy en el curso de ADOO en escuela.it y me quiero lanzar a utilizar un framework más completo que CodeIgniter.

Vamos a mi caso particular a ver si me puedes orientar un poco hacia donde dirigirme. Estoy siguiendo el manual de Laravel y en la instalación del Homestead sigo todos los pasos sin ningún problema hasta el momento de enviar el comando: vagrant up la consola que utilizo es Git Bash desde Windows 10, parece que todo va correcto hasta que me lanza el siguiente mensaje de error:

... Stderr: VboxManage.exe: error: The host network interface with the given name could not be found VBoxMage.exe: error: Detail code E_INVALIDARG (0x80070057), component HostWrap, interface IHost, callee IUnknown.VBoxMage.exe: error: Context: FindHostNetworkInterfaceByName(Bstr(pszName).raw(), hif.asOutParam()) at line 205 of file VBoxManageHostonly.cpp

El único cambio que he realizado con respecto a la configuración del manual es la IP asignada en homestead.yaml

¿Alguna idea?. Un saludo y gracias.

Jesús González

18/1/2016
Permisos de directorios
al no utilizar Homestead e instalar laravel con composer, cambié los permisos con chmod y seguía sin darme acceso así que probe autorizando sólo al usuario http con setfacl sudo setfacl -R -m u:http:rwx -m u:`whoami`:rwx storage/ bootstrap/cache/, sudo setfacl -dR -m u:http:rwx -m u:`whoami`:rwx storage/ bootstrap/cache/ y funciono bien, esto lo tome del manual de symfony, espero que a alguien le sirva