Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [5.x] Fix static caching invalidation for multi-sites by duncanmcclean · Pull Request #10517 · statamic/cms · GitHub
Skip to content

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

Closed
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation
Closed

[5.x] Fix static caching invalidation for multi-sites#10517
duncanmcclean wants to merge 113 commits into
5.xfrom
fix/multisite-static-caching-invalidation

Conversation

@duncanmcclean

Copy link
Copy Markdown
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():

publicfunctiongetBaseUrl()
{
// 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;
}
returnrtrim($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.

duncanmccleanand 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>
duncanmccleanand 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 freeto 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

20 participants

@duncanmcclean@peimn@jasonvarga@vluijkx@ryanmitchell@dnwjn@andjsch@ebeauchamps@jackmcdade@heidkaemper@FrankGREV@jelleroorda@PatrickJunod@tommulroy@daun@rezbouchabou@925dk@miloslavkostir@JohnathonKoster@arcs-