Skip to content

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

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

Closed
wants to merge 113 commits into from

Conversation

duncanmcclean
Copy link
Member

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.

$this->cacher->invalidateUrls(
Arr::get($this->rules, "collections.{$entry->collectionHandle()}.urls")
);

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():

public function getBaseUrl()
{
// Check 'base_url' for backward compatibility.
if (! $baseUrl = $this->config('base_url')) {
// This could potentially just be Site::current()->absoluteUrl() but at the
// moment that method gets the URL based on the request. For now, we will
// manually get it from the config, as to not break any existing sites.
$baseUrl = Str::startsWith($url = Site::current()->url(), '/')
? Str::removeRight(config('app.url'), '/').$url
: $url;
}
return rtrim($baseUrl, '/');
}

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.

duncanmcclean and others added 30 commits July 27, 2024 22:35
Co-authored-by: duncanmcclean <duncanmcclean@users.noreply.github.com>
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: Duncan McClean <duncan@duncanmcclean.com>
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: John Koster <john@stillat.com>
* add dark mode bg-color for little dot

* adjust widgets header icon color for dark mode

* change cp widgets svg color
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: Jelle Roorda <info@roordaict.nl>
Co-authored-by: Jason Varga <jason@pixelfear.com>
…e` middleware (#9406)

Co-authored-by: Jason Varga <jason@pixelfear.com>
duncanmcclean and others added 27 commits August 15, 2024 13:27
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: Jason Varga <jason@pixelfear.com>
Co-authored-by: Duncan McClean <duncan@duncanmcclean.com>
Co-authored-by: Jason Varga <jason@pixelfear.com>
* remove duplicated key

* translate statamic

* dictionaries translation

* label translation

* Update Persian translation

* update translation
* Azerbaijani translation

* fix php linter errors

* Update Azerbaijani translation

* reformat json

* update translation
* Update turkish dictionary

* label translation

* Update Turkish translation

* update old translation

* remove duplicate

* update translation
…m:statamic/cms into fix/multisite-static-caching-invalidation
@duncanmcclean duncanmcclean deleted the fix/multisite-static-caching-invalidation branch August 23, 2024 17:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Cache is not getting invalidated in Multisite setup