Open
Description
Symfony version(s) affected
7.2.3
Description
It would be expected (or was expected to us) that cache:warm
would lead to the warming of all caches, (or, certainly all the ones cache:clear
would also subsequently warm).
However using cache:warm
, we identified that the Router cache file url_generating_routes.php
wasn't being generated, which lead to an issue in production in conjunction with read-only build directories.
How to reproduce
% symfony new cache_test --version="7.2.x"
* Creating a new Symfony 7.2.x project with Composer
[OK] Your project is now ready ...
% rm -rf var/cache/dev
% bin/console cache:warmup
// Warming up the cache for the dev environment with debug true
[OK] Cache for the "dev" environment (debug=true) was successfully warmed.
% ls -lah var/cache/dev
- App_KernelDevDebugContainer.php
- App_KernelDevDebugContainer.php.lock
- App_KernelDevDebugContainer.php.meta
- App_KernelDevDebugContainer.php.meta.json
- App_KernelDevDebugContainer.preload.php
- App_KernelDevDebugContainer.xml
- App_KernelDevDebugContainer.xml.meta
- App_KernelDevDebugContainer.xml.meta.json
- App_KernelDevDebugContainerCompiler.log
- App_KernelDevDebugContainerDeprecations.log
- ContainerXGJHbum
- Symfony
% bin/console cache:clear
// Clearing the cache for the dev environment with debug true
[OK] Cache for the "dev" environment (debug=true) was successfully cleared.
% ls -lah var/cache/dev
- App_KernelDevDebugContainer.php
- App_KernelDevDebugContainer.php.lock
- App_KernelDevDebugContainer.php.meta
- App_KernelDevDebugContainer.php.meta.json
- App_KernelDevDebugContainer.preload.php
- App_KernelDevDebugContainer.xml
- App_KernelDevDebugContainer.xml.meta
- App_KernelDevDebugContainer.xml.meta.json
- App_KernelDevDebugContainerCompiler.log
- App_KernelDevDebugContainerDeprecations.log
- ContainerXGJHbum
- Symfony
- url_generating_routes.php
- url_generating_routes.php.meta
- url_generating_routes.php.meta.json
- url_matching_routes.php
- url_matching_routes.php.meta
- url_matching_routes.php.meta.json
Notice how cache:clear
includes 6x additional files covering the Router
Possible Solution
No response
Additional Context
- We use AWS Lambda to instantiate a Symfony/Messenger to process jobs from a AWS SQS queue
- One of the challenges we work around is the read only nature of the file system
- When investigating an issue when the app was generating a route in the Symfony/Messenger environment, around the read-only file system
Error thrown while handling message AppBundle\Message\AddToQueueMessage. Sending for retry #2 using 60 ms delay. Error: "Handling "AppBundle\Message\AddToQueueMessage" failed: Failed to send DataRecord [2053446] to destination for workflow 'XXX' in driver 'XXX' because: Cannot rename "/tmp/url_generating_routes.phpuC7Iek" to "/app/var/cache/tenant_XXX/url_generating_routes.php": rename(/tmp/url_generating_routes.phpuC7Iek,/app/var/cache/tenant_XXX/url_generating_routes.php): Read-only file system"
- Our build scripts had executed
cache:warm
all environments in the Docker build phase - On investigation it looked like the Router wasn't respecting the read-only cache, but further investigation lead to a discovery that
cache:warm
wasn't generating the files. - We've since replaced the
cache:warm
withcache:clear
in our build scripts, however I felt this issue should be opened as on the surfacecache:warm
would be expected to have also warmed the Router cache. - We set
Kernel::getCacheDir
as '/tmp/cache' andKernel::getBuildDir
as '/app/var/cache' as the the read/write and read-only cache respectfully