-
-
Notifications
You must be signed in to change notification settings - Fork 541
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[5.x] Fix static caching invalidation for multi-sites #10669
base: 5.x
Are you sure you want to change the base?
[5.x] Fix static caching invalidation for multi-sites #10669
Conversation
This will allow us to get the site the content was just changed in.
…alidation-for-multisites
Handling the invalidation of collection trees separate to the invalidation of collections means that we only need to invalidate stuff in the site of the tree that was updated.
This is ready for review now. The only thing I noticed while testing this PR on a real site was the fact that the 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 |
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.cms/src/StaticCaching/DefaultInvalidator.php
Lines 70 to 72 in fd24694
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()
:cms/src/StaticCaching/Cachers/AbstractCacher.php
Lines 49 to 62 in fd24694
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.