Hallo,
ich nutze TYPO3 v13 und habe viele Änderungen an Templates und CSS durchgeführt. Mein Deployment läuft schon lange mit Deployer und Gitlab CI.
Problem:
Nachdem Deployment werden nicht bei allen Nutzern die Änderungen sofort sichtbar. Sie bekommen das aktuelle html-Template aber der Browser lädt nicht die neuen CSS Dateien, sondern die alten aus dem Cache. Daher sieht die Seite dann kaputt aus bis der Nutzer STRG+F5 drückt.
Ich habe schon viel ausprobiert, aber das Problem besteht weiterhin.
Bei jedem Deployment wird die folgende Konfiguration mit der aktuellen Gitlab Pipeline-ID erfolgreich neu gesetzt:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['assetsVersion']
Außerdem habe ich bei
$GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename'] alle Varianten getestet.
Der Postfix im Dateinamen bei den Einbindungen der CSS-Dateien ändert sich bei jedem Deployment erfolgreich.
Hier im Beispiel "1767877351":
<link rel="stylesheet" href="/typo3temp/assets/css/1b26dda67c8456566c07c7d08cba290c.1767877351.css" media="all">
<link rel="stylesheet" href="/_assets/c9b8c00b1098b8413dc0b44075098d17/Css/html5videoplayer.1767877265.css" media="all">
<link rel="stylesheet" href="/_assets/9622e68a44e34be86a18ee13ba315342/Css/ric-main.1767877265.css" media="all">
In meinem Deployer Script habe ich meinen Task um den Task zu löschen massiv ausgeweitet:
desc('Aggressive cache clearing');
task('typo3:cache_clear_all', function () {
// Alle TYPO3 Caches
run('{{bin/php}} {{bin/typo3}} cache:flush');
// Explizit Asset-Cache leeren
run('cd {{release_path}} && rm -rf var/cache/*');
run('cd {{release_path}} && rm -rf public/typo3temp/assets/*');
// WICHTIG: Lösche auch compiled Assets
run('cd {{release_path}} && find public/_assets -type f -name "*.css" -delete');
run('cd {{release_path}} && find public/_assets -type f -name "*.js" -delete');
// OPcache leeren via cachetool (wenn konfiguriert)
try {
invoke('cachetool:clear:opcache');
} catch (\Exception $e) {
writeln('OPcache clearing skipped');
}
});
Meine .htaccess-Datei enthält unter vielem anderem:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType text/css "access plus 1 year"
...
</IfModule>
# Zusätzliche Cache-Control Headers für versionierte Assets
<IfModule mod_headers.c>
# CSS/JS mit Query-String (versioniert) können aggressiv gecacht werden
<FilesMatch "\.(css|js)$">
<If "%{QUERY_STRING} =~ /^\d+$/">
Header set Cache-Control "public, max-age=31536000, immutable"
</If>
</FilesMatch>
# Fallback für nicht-versionierte CSS/JS (sollte nicht vorkommen, aber sicher ist sicher)
<FilesMatch "\.(css|js)$">
<If "%{QUERY_STRING} == ''">
Header set Cache-Control "public, max-age=3600, must-revalidate"
</If>
</FilesMatch>
</IfModule>
Hat jm. eine Lösung für mich damit nicht bei diversen Usern noch 2 Tage nach meinem Update das FrontEnd kaputt aussieht, bis ich Ihnen mitteile Sie sollen in ihrem Browser STRG+F5 drücken?
Ich bin für jeden Tipp dankbar!