symfony / ux

Symfony UX initiative: a JavaScript ecosystem for Symfony
https://ux.symfony.com/
MIT License
828 stars 299 forks source link

[LiveComponent] Cannot assign null to property Symfony\UX\LiveComponent\Twig\TemplateMap::$map of type array #1961

Open tijnema opened 3 months ago

tijnema commented 3 months ago

Hi,

During deployment on our live environment we quite often get the error Cannot assign null to property Symfony\UX\LiveComponent\Twig\TemplateMap::$map of type array

It seems to be related to a race condition with cache. Not sure how it occurs exactly, but it can easily be reproduced by deleting the live_components_twig_templates.map file from the cache folder.

smnandre commented 3 months ago

Do you sometimes prune / delete your cache folder ? Or even with a CachePoolClearer maybe ?

tijnema commented 3 months ago

We use Ansistrano for deployment. It places new version of the project in a new directory (with empty cache folder), and then switches a symlink to this new folder.

smnandre commented 3 months ago

Do you warm the cache before the symlink ? The other possibility would be: do you change your APP_SECRET between deployments ?

tijnema commented 3 months ago

APP_SECRET never changes. We currently do not warm the cache before symlink. That might just fix the issue. The issue does remain when clearing the cache on a running instance though. I guess this piece of code could be written to work without existing cache too?

smnandre commented 3 months ago

Well, yes and no :)

Yes it would work to "render" a component.

But if you clear the cache (without rebuilding it) while a user is browsing a page containing live components, that would break.

Maybe we should generate this file in the "build" directory and not the "cache" one ?

RikudouSage commented 1 month ago

Is there at least some workaround? It happens constantly in one app I create, only in the docker container, though.

smnandre commented 1 month ago

Hi @RikudouSage, do you have APP_SECRET env variable configured?

tijnema commented 1 month ago

@RikudouSage Maybe you should warm the cache before running the app ?