skip to Main Content

We have two different pods in Kubernetes for our Laravel app,

  • one running apache serving on port 80, (CMD /usr/sbin/apache2ctl -D FOREGROUND)
  • and another running worker (Laravel Horizon) (CMD php /var/www/artisan horizon)

The issue is when I check the horizon dashboard, it says ‘Active’, and I can see the Jobs in the ‘Pending Jobs’ section, but they never actually execute. They are just sitting there idle.

Now, when I SSH in the pod running apache and manually and run the command ‘php artisan horizon’ than it actually executes all pending jobs.

I have already ensured the followings:

  1. Both the pods are connected with the same Redis database service
  2. Horizon Prefix is the same for both the pods

6

Answers


  1. Chosen as BEST ANSWER

    After struggling for days, I got the answer to this problem.

    While using Redis as a cache, queue, or broadcast broker in the docker environment, we need to make sure that the following environment variables are defined properly and they must be the same across all the pods.

    • CACHE_PREFIX
    • REDIS_PREFIX
    • REDIS_CACHE_DB
    • HORIZON_PREFIX

    Hope this will help others trying to deploy the Laravel apps using Kubernetes and Docker.


  2. In my case, I need to change my app environment from prod to production

    APP_ENV=production
    
    Login or Signup to reply.
  3. Double check your APP_ENV matches one of the environments in the horizon.php config. Otherwise horizon will not start any queue workers.

    By default only local and production environments are provided:

    https://laravel.com/docs/8.x/horizon#environments

    Login or Signup to reply.
  4. In my case I added the jobs into "emails" queue, but horizon.php config file didn’t specify this queue name for supervisor-1 🙂

    Login or Signup to reply.
  5. I just restart Redis server

    /etc/init.d/redis-server restart
    
    Login or Signup to reply.
  6. If jobs or listeners send requests to external services and cannot reach destination hosts and the connection timeout value is set to something very big or job timeout value is also set to a big value then the jobs might also be in pending state long enough so that it may seem that horizon is not executing them.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search