Laravel Cloud Tip: Why Horizon Won’t Run Your Jobs (and How to Fix It)
If you’ve been playing around with Laravel Cloud and run Horizon, you might have hit this weird one: the dashboard looks perfect, but… no jobs are being processed. That happened to me the other day, and yes — it ended with a slightly embarrassed support message.
Setting the Scene
I’ve been a Laravel fan for years. Between the framework itself, Forge, and now Laravel Cloud, it’s been my go-to way to get apps live without spending all my time on servers and deployments.
Sure, I can set up my own servers — I’ve done it plenty of times — but honestly, I’d rather build features than worry about scaling, downtime, or “what happens if this thing falls over at 2 a.m.”
Laravel Cloud is perfect for that. It lets me be a developer, not a DevOps engineer (and I’m totally fine with that 😅).
The “DOH!” Moment
Laravel Cloud is great at auto-configuring stuff. Add storage? Boom, env variables set. Need a KV store or database? Done.
So when I added a worker node for Horizon, I just assumed it would set QUEUE_DRIVER to Redis for me. After all, Horizon + Redis = happy queues, right?
Wrong.
The Horizon dashboard looked fine — no errors, everything green — but no jobs were actually running. I spent a few minutes scratching my head before sending a slightly confused message to Laravel Cloud support… only to realise I’d never actually set the queue driver myself.
The Fix
If you’re using Horizon on Laravel Cloud, you need to manually set your queue driver. Here’s what I should have done from the start:
In your Laravel Cloud project, open Custom Environment Variables.
Add:
QUEUE_DRIVER=redis
Redeploy the app.
Boom. Jobs start running instantly.
Takeaway
Even after years of working with Laravel, it’s still possible to have a “Homer Simpson” moment. Laravel Cloud does a lot for you, but in this case, setting the queue driver is still on you.
So next time you spin up Horizon in Laravel Cloud — set QUEUE_DRIVER=redis before you start wondering why your jobs are stuck.