Fix Laravel Cache & Config Issues — Changes Not Showing (2025)
🔁 Fix “Changes not taking effect” — Laravel Cache & Config Issues (2025)
When you change config/routes/views but Laravel still shows the old behavior, the problem is almost always cache. Laravel caches config, routes, views and other things to speed up production — but that means changes won’t appear until caches are cleared or rebuilt.
🔍 Why this happens
config:cache stores application config (including .env values) to a single PHP file — changes to .env or config/*.php won’t apply until you clear/rebuild the cache.
route:cache speeds up routing but can’t include route closures; caching routes with closures will break them.
view:cache caches compiled Blade templates.
PHP OPcache or long-running workers (queue/Octane) may still serve old code until restarted.
File permission issues can prevent Laravel from writing new cache files.
🛠 Step-by-step fixes (safe for dev & production)
1) Clear all Laravel caches (development / quick fix)
Run inside your project:
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
composer dump-autoload
What this does: removes cached config, app cache, cached routes and compiled views. composer dump-autoload refreshes the autoloader after class changes.
2) Rebuild optimized caches (production)
After you’ve cleared and verified changes, rebuild optimized caches for better performance:
php artisan config:cache
php artisan route:cache
php artisan view:cache
Caution: only run route:cache if your routes do not use closures (use controller classes instead). config:cache will embed .env values — so don’t change .env afterward without clearing cache again.
3) Restart PHP (fix OPcache / workers)
If you still see old behavior, restart PHP-FPM / your queue workers / Octane:
# systemd example (Ubuntu)
sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx
# restart queue workers (if using supervisor)
sudo supervisorctl restart all
Restarting ensures PHP OPcache and long-running processes load the fresh code/config.
4) Permissions & storage
Make sure Laravel can write cache files:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
(Replace www-data with your webserver user if different.)
5) If you changed .env
Always clear config cache after changing .env:
php artisan config:clear
# then, optionally
php artisan config:cache
If you forget, Laravel will keep using the cached env values.
🔎 Quick troubleshooting checklist
Did you run php artisan config:clear after changing .env? ✅
Are you using closures in routes/web.php? If yes — don’t use route:cache. ❌
Are queue workers or Octane running? Restart them. 🔁
Are storage and bootstrap/cache writable? ✅
Did you rebuild caches in production after the final change? ✅
🎯 Pro tips for deployment (short)
In CI/CD: clear caches → composer install → migrate → cache (config/route/view). Example sequence:
php artisan config:clear
php artisan route:clear
php artisan view:clear
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
Use --force for migrations in automated deploys.
Avoid route:cache during active development. Use it only in production builds.