Ok you have some jobs to process in the background using Redis, the first problem that you can get is:
php_network_getaddresses: getaddrinfo for redis failed: nodename nor servname provided, or not known
We are going to tackle this in different steps, first check if you have installed Redis
locally, in your terminal run:
Step 1: Install Redis
brew install redis
Check Redis installation
php -m | grep redis
You should be able to see that the redis module is installed
Step 2: Set Redis variables
In the .env
file set or replace this values:
# Driver configuration
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
# Redis setup
REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379
If you are using Herd everything would work, if you are using Herd Pro there is a services section, ONLY if you are using that specific feature this variable should change REDIS_PORT=6138
Step 3: Install Laravel Horizon
In the terminal execute:
composer require laravel/horizon
And this other command to publish the files:
php artisan horizon:install
Step 4: Check the connection
In the terminal execute:
php artisan horizon
You should be able to see the horizon response:
Horizon started successfully.
Step 5: Check Horizon Dashboard
Go to the browser and add to your project url your-project.test/horizon
Then you should be able to see the Horizon dashboard with status: active
Now, you are able to run jobs and monitor them in horizon.
Bonus
Step 6: Set Queues for different Jobs:
You can go to config/horizon.php
and set specific queues and even add more supervisors, by default it checks only "defaul" queue, but as it is an array you can add multiple of them:
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default', 'sendEmailInvites'],
Now you only need to set a specific queue for your emails with something like this:
Mail::to('user@example.com')
->queue((new InvitationEmail($data))->onQueue('sendEmailInvites'));
You can even go further and set Queue Configuration (not necessary)
Make sure your config/queue.php has the queue configured:
'connections' => [
'redis' => [
'driver' => 'redis',
// ... other config
'queue' => env('REDIS_QUEUE', 'default'),
],
],
// You can also define named queues
'sendEmailInvites' => [
'driver' => 'redis',
'queue' => 'sendEmailInvites',
],
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.