Hola!, Laravel es sin duda alguna un increíble framework PHP, que nos facilita el desarrollo y guía a utilizar buenas pácticas de desarrollo, el desarrollo de un proyecto en Laravel es bastante sencillo de realizar, dependiendo de el tamaño del proyecto tendrá cierta dificultad, pero sin duda alguna ya se un proyecto basico muy simple como uno muy complejo, éste no sirve de nada si nolo subimos a un servidor a produción y para ello que mejor que utilizar Forge, por lo que te invito a ver como instalar un proyecto Laravel 5.4 en esta plataforma.

Este artículo utiliza beanstalkd el cual Forge lo ha quitado por defecto desde el 20 de Mayo del 2020, aún así es posible utilizarlo, sólo se debe configurar manualmente en el servidor.

Queues de emails

1- Instalar agregando al composer.json

"pda/pheanstalk": "^3.1",

y ejecutamos en nuestra terminal

composer update

2- Dejar archivo .env

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=beanstalkd

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

3- Crear nuevo worker en Forge Laravel

Configuración de Queue en Forge Laravel

En la opción Queue forge nos indica automáticamente la palabra default, esto es por que en nuestro archivo queue.php de nuestro proyecto Laravel ubicado en

config/queue.php

tenemos lo siguiente en donde queue es default

'beanstalkd' => [
        'driver' => 'beanstalkd',
        'host' => 'localhost',
        'queue' => 'default',
        'ttr' => 60,
    ],

Si en nuestro proyecto utilizamos otro nombre para éste debemos cambiarlo en Forge a la hora de crear el nuevo worker.

Si tendran varias aplicaciones Laravel funcionando en el servidor con Queue’s, les recomiendo encarecidamente que primero en nuestro archivo

config/queue.php

cambiemos el valor

'queue' => 'default',

por uno acorde al sitio por ejemplo

'queue' => 'sitiouno',

teniendo que modificar en Forge donde dice default por sitiouno

Laravel 5.2 hacia abajo = El valor de Timeout debe estar en 0, de lo contrario el worker no se ejecutará lanzando un FATAL ERROR

Laravel 5.3 ó 5.4 = El valor de Timeout pueden ponerlo en 30 o 60

MUY IMPORTANTE

Y por último activen el checkbox Run worker as Daemon (Laravel 4.2+), ésto es muy importante dado que si no lo activan forge generara en la configuracion de supervisor un

queue:listen

consumiendo demasiada CPU y RAM teniendo que botear el framework Laravel completo cada vez, en cambio al activar la opcion Run worker as Daemon (Laravel 4.2+) Forge en la configuración de supervisor usará

queue:worker --daemon

Levantando un proceso PHP liberando CPU y RAM, (sobretodo CPU, créanme es una diferencia notable, se los digo por mala experiencia al no saber xD)

Al utilizar Daemon debemos obligadamente agregar

php artisan queue:restart

a nuestro Deploy Script

pasando de esto :

cd /home/forge/midominio.com
git pull origin master
composer install --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php5.6-fpm reload

if [ -f artisan ]
    then
    php artisan migrate --force
fi

a esto:

cd /home/forge/midominio.com
git pull origin master
composer install --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php5.6-fpm reload

if [ -f artisan ]
then
    php artisan migrate --force
    php artisan queue:restart
fi

Si no agregamos esto y realizamos cambios a nuestro proyecto (código) y subimos los cambios y hacemos un deploy el queue worker que tengamos andando no funcionará por que no recibirá los cambios que hemos realizado, por lo que colocando esa línea forzamos a que cuando hacemos un Deploy se reinicio el queue worker y tome los cambios realizados.

IMPORTANTE: Eso es todo para los Queue’s, sólo asegurarse de NO tener la aplicacion en modo mantenimiento sino, los queue’s no se procesarán.

Cron con Task Scheduling

Por lo general en nuestros proyectos agregamos tareas para que se ejecuten de manera automática, para ésto, en Laravel utilizamos Task Scheduling, en donde, dentro de nuestro archivo Kernel.php ubicado en:

app/Console/Kernel.php

vamos a agregar nuestras tareas programadas, como podrían ser:

//Elimina pedidos cada 5 minutos
$schedule->command('eliminar:pedidos')->everyFiveMinutes()->withoutOverlapping();

ó por ejemplo

//Envia email cumpleaños diariamente a las 00:01 hrs
$schedule->command('email:birthday')->dailyAt('00:01')->withoutOverlapping();

Para que éstas tareas se ejecuten correctamente con Forge de Laravel debemos seleccionar nuestro servidor en nuestra cuenta de Forge y iremos a la opción Scheduler y creamos un nuevo job, en mi caso lo que hago es agregar un job por cada proyecto que tengo (dominio)

php /home/forge/midominio.com/artisan schedule:run

reemplazando claramente donde dice midominio.com por nuestro dominio ya agregado en Forge y en usuario dejamos forge como viene por defecto y en frecuencia seleccionamos Every Minute

Eso es todo ya con ello nuestro cron funcionará correctamente, les aconsejo por cualquier cosa que reiniciar su servidor desde la parte inferior de ésta seccion de Forge podemos reiniciarla

Espero que ha alguien le sirva!