cms icon indicating copy to clipboard operation
cms copied to clipboard

[5.x] Fix static caching invalidation for multi-sites

Open duncanmcclean opened this issue 1 year ago • 1 comments

This pull request fixes some issues around Static Caching invalidation & Multi-sites, when the queue driver is set to anything other than sync.

When the DefaultInvalidator class passes down the invalidation rules from the config, it does so without specifying the domain in which the URLs should be invalidated.

https://github.com/statamic/cms/blob/fd24694982471443257df1f2d4dbd0b4576f1c95/src/StaticCaching/DefaultInvalidator.php#L70-L72

The invalidateUrls method attempts to get the domain from the invalidation URLs in the config (which is why the mentioned workaround works).

When an invalidation rule doesn't include a domain, it'll attempt to get the site's "base URL" using AbstractCacher::getBaseUrl():

https://github.com/statamic/cms/blob/fd24694982471443257df1f2d4dbd0b4576f1c95/src/StaticCaching/Cachers/AbstractCacher.php#L49-L62

This method then calls Site::current() which gets the domain by getting the current site, based on the request URL.

However, since we're in the context of a queue, there is no request, so Statamic falls back to the "default" site URL, which causes the path on the intended site to not get invalidated (intended being the site the entry is associated with).

This pull request attempts to fix this by including the domain in the array of URLs passed to invalidateUrls.

Fixes #7691. Replaces #10517.

duncanmcclean avatar Aug 20 '24 14:08 duncanmcclean

This is ready for review now.

The only thing I noticed while testing this PR on a real site was the fact that the GlobalVariablesSaved event is dispatched for every site whenever one site's globals are updated.

This means that whenever you update a global set, the global set will be invalidated in all sites, rather than just the site the global was just updated in.

I've opened a separate issue for that, as it'll likely require a breaking change in order to fix: #10888


Update: The above issue has been addressed in v6 (#11585).

duncanmcclean avatar Aug 27 '24 15:08 duncanmcclean

Any chance of pushing this one through? I have a client who has had issues with static caching on their multisite for years now. Not sure if this PR will solve it but I am hopeful!

stuartcusackie avatar Feb 19 '25 15:02 stuartcusackie

Any idea on when this might be part of a V5 release? I'm now facing this issue in 4 client sites.

In the meanwhile, a suggestion on a temp fix?

wautersj avatar Apr 09 '25 10:04 wautersj