Recurring 503 Errors in Symfony App When In Prod Environment

pattern
details
30th Jul 2024

Joe SEO Blog.

How to Resolve a Recurring 503 Error from Doctrine Cache in Symfony Production Environment

Encountering a 503 Service Unavailable error can be frustrating, especially when it appears only in your production environment and not when in dev environment.

In this article, we will explore a specific scenario where this error manifests in a Symfony application and how to resolve it effectively.

The Problem

Imagine you have a Symfony app (v7.0) with an admin dashboard accessible at http://example.org/admin.

After deploying the app, the /admin page loads successfully once but fails with a 503 error on subsequent requests.

Interestingly, clearing the cache allows the page to load again but only once.

This issue may not occur on other routes or controllers, such as /admin/subpage.

Here’s the typical 503 error response from the server:

503 error

Diagnosis and Solution

Upon investigating further, the root cause of the issue was identified as a problem with the cache.system configuration in the Symfony framework.

By default, Symfony's cache component uses APCu for cache.system. If APCu is not available, it falls back to the filesystem.

Here’s the original cache configuration that led to the 503 error:

    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system

To resolve the 503 error, changing the 'cache.system' configuration to either cache.adapter.redis or cache.adapter.filesystem proved effective.

Here’s how you can adjust your configuration:

This is what wasn't working:

    
    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system

This is what worked:


    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.adapter.filesystem

By applying either of these configurations, the recurring 503 error was resolved, and the application could handle multiple requests to the /admin page without issues.

Conclusion

Resolving a recurring 503 error in a Symfony production environment, especially when linked to Doctrine cache, requires a deep understanding of Symfony’s caching mechanisms and configuration.

By changing the the cache.adapter configuration to  cache.adapter.filesystem, you can ensure your application runs smoothly in production without falling back to development mode for troubleshooting.

If you encounter similar issues, consider revisiting your cache configuration and ensuring that the appropriate adapters are in place.

With these adjustments, you can maintain a robust and reliable production environment for your Symfony applications.