Update (auf 2.6.1) bricht ab oder Cache-Seite lädt nicht

Geändert am Mi, 21 Okt um 6:59 NACHMITTAGS

Betrifft JTL-Shop 5, wenn noch Version 2.6.0 des Plugins EU Cookie installiert ist. Das Problem zeigt sich im Backend oder beim Update auf 2.6.1 oder neuer.


INHALTSVERZEICHNIS


Welcher Fall trifft auf dich zu?

  • Du hast das Update auf 2.6.1 noch nicht gemacht, aber im Backend funktioniert etwas nicht, zum Beispiel lässt sich System > Cache nicht mehr öffnen: weiter bei Abschnitt 1.
  • Du hast auf Aktualisieren geklickt und das Update ist abgebrochen: weiter bei Abschnitt 2.

In beiden Fällen brauchst du Abschnitt 3, dort steht, wie du den Objektcache leerst. Abschnitt 4 erklärt den Hintergrund.


1. Du hast das Update noch nicht gemacht

Daran erkennst du es:

  • Die Backend-Seite System > Cache lässt sich nicht öffnen oder lädt sehr lange.
  • Die Systemdiagnose bricht ab.
  • Die Cache-Seite im Plugin-Dashboard läuft in einen Fehler.
  • Auch Updates anderer Plugins brechen mit einem Speicherfehler ab.
  • Im Fehlerlog steht "Allowed memory size of ... bytes exhausted".
  • Dein Frontend läuft dabei ganz normal weiter. Betroffen sind nur einzelne Seiten im Backend.

So gehst du vor:

  1. Objektcache leeren, siehe Abschnitt 3.
  2. Das Plugin-Update ganz normal über den Plugin-Manager oder den Lizenzmanager installieren. Das Update entfernt die Reste des alten Caches zusätzlich noch einmal selbst, das klappt auch bei knappem Speicher.
  3. Prüfen, ob sich System > Cache im Backend wieder normal öffnet. Wenn ja, ist die Sache erledigt.

Leere den Cache bitte vor dem Update. Sonst kann auch das Update abbrechen und du landest bei Abschnitt 2.

Nutzt dein Shop die Methode Dateien, leere dafür das Verzeichnis templates_c/filecache (Abschnitt 3.2), auch wenn du den Cache schon auf einem anderen Weg geleert hast.


2. Das Update ist abgebrochen

Daran erkennst du es:

  • Du hast im Plugin-Manager oder im Lizenzmanager auf Aktualisieren geklickt.
  • Die Seite bleibt weiß, lädt nicht fertig oder zeigt einen Speicherfehler.

Schau im Plugin-Manager nach, welche Version das Plugin jetzt anzeigt, und lies im passenden Unterabschnitt weiter.


2.1 Das Plugin zeigt noch die alte Version

Ist mein Shop jetzt kaputt? In der Regel nicht. Dein Frontend läuft normal weiter, es gibt keinen Wartungsmodus. Das Update ist gar nicht erst losgelaufen: Auf dem Server liegen zwar schon die neuen Plugin-Dateien, in der Datenbank steht aber noch die alte Version. Das gleicht der nächste erfolgreiche Update-Durchlauf von selbst wieder an.

So gehst du vor:

  1. Die Startseite deines Shops aufrufen oder die Plugin-Übersicht im Backend neu laden. Bei einem sehr großen Cache kann das ein paar Sekunden dauern.
  2. Im Plugin-Manager oder Lizenzmanager erneut auf Aktualisieren klicken.
  3. Bricht es wieder ab: Objektcache leeren, siehe Abschnitt 3, und dann noch einmal auf Aktualisieren klicken.

Reicht es, einfach noch einmal auf Aktualisieren zu klicken? Meistens ja, wenn du vorher einmal eine Seite aufrufst. Der Shop räumt beim Update als allererstes den Cache auf und scheitert genau daran. Beim abgebrochenen Versuch sind die neuen Plugin-Dateien aber schon auf dem Server gelandet. Beim nächsten Seitenaufruf entfernt das Plugin damit die Reste des alten Caches gezielt, ohne den Objektcache zu leeren, und der nächste Versuch läuft durch. Voraussetzung ist, dass das Plugin aktiviert ist. Bricht auch der zweite Versuch ab, leere den Objektcache von Hand.


2.2 Das Plugin zeigt schon die neue Version

Dann ist das Update weit gekommen, aber nicht ganz fertig geworden. Klick nicht erneut auf Aktualisieren und deinstalliere nichts.

  1. Objektcache leeren, siehe Abschnitt 3.
  2. Bei unserem Support melden, damit wir die Einstellungen mit dir prüfen.


2.3 Das Plugin erscheint zweimal in der Übersicht

Stehen nach einem abgebrochenen Update-Versuch zwei Einträge für EU Cookie im Plugin-Manager, einer davon als fehlerhaft markiert oder mit dem Hinweis, dass das Verzeichnis fehlt:

  1. Deinstalliere keinen der beiden Einträge. Dabei können Plugin-Einstellungen und gespeicherte Consent-Daten verloren gehen.
  2. Objektcache leeren, siehe Abschnitt 3.
  3. Mach einen Screenshot der Plugin-Übersicht und meld dich damit bei unserem Support. Wir bringen das gemeinsam mit dir in Ordnung.


3. Objektcache leeren

Ein Weg genügt. Nimm den, der zu deinem Zugang passt.

Der Shop ist für kurze Zeit langsamer, weil der Cache neu aufgebaut wird. Das ist normal und je nach Shopgröße nach wenigen Minuten vorbei.


3.1 Per SSH (empfohlen)

Führe im Shop-Wurzelverzeichnis aus:

php cli cache:clear

Der Befehl leert den kompletten Objektcache auf einen Schlag und braucht dabei kaum Speicher. Er funktioniert deshalb auch dann, wenn im Backend nichts mehr geht.

Bei der Methode Dateien mit sehr vielen Cache-Dateien kann auch dieser Befehl am Speicherlimit scheitern. Nimm dann den find-Befehl aus Abschnitt 3.2.

Wenn du zusätzlich den Dateicache nutzt, danach noch:

php cli cache:file:delete


3.2 Nur Dateicache: per FTP oder Dateimanager

Lösche per FTP oder über den Dateimanager deines Hosters den Inhalt des Verzeichnisses [Shopverzeichnis]/templates_c/filecache. Das Verzeichnis selbst bleibt bestehen, der Shop füllt es von allein wieder.

Bei sehr vielen Dateien kann schon das Öffnen des Ordners im FTP-Programm lange dauern. Mit SSH geht es deutlich schneller, dort genügt im selben Verzeichnis:

find . -maxdepth 1 -type f -delete


3.3 Direkt in Redis

Wähle in redis-cli die vom Shop genutzte Datenbank aus und leere sie. Die Nummer findest du im Backend unter System > Cache > Einstellungen.

SELECT <nummer>
FLUSHDB

Nimm kein FLUSHALL, wenn auf derselben Redis-Instanz noch andere Datenbanken liegen, zum Beispiel für PHP-Sessions.


3.4 Über das Backend mit mehr Speicher

Der Button Gesamten Objekt-Cache leeren liegt ausgerechnet auf der Seite, die sich nicht mehr öffnen lässt. Mit mehr Arbeitsspeicher lässt sie sich meist doch noch einmal aufrufen:

  1. PHP-Speicherlimit vorübergehend erhöhen, zum Beispiel auf 2048M. Je nach Hoster geht das im Kundenpanel oder über memory_limit in der .user.ini bzw. php.ini.
  2. Im Backend System > Cache öffnen.
  3. Unten auf Gesamten Objekt-Cache leeren klicken.
  4. Speicherlimit wieder auf den alten Wert zurücksetzen.

Setz hier bitte nicht nur den Haken bei Plugins und leere diese eine Gruppe. Genau das ist der Vorgang, der den Fehler auslöst. Nimm den Button für den gesamten Objekt-Cache.

Lädt die Seite auch mit mehr Speicher nicht, hilft dieser Weg nicht weiter. Nimm dann Abschnitt 3.1, 3.3 oder 3.5.


3.5 Über deinen Hoster

Öffne ein Ticket bei deinem Hoster. Du kannst den folgenden Text verwenden:

"Bitte den Objektcache des JTL-Shops leeren. Bei Redis: FLUSHDB auf der vom Shop genutzten Datenbank, nicht FLUSHALL. Alternativ ein Neustart des Redis-Dienstes, sofern keine Redis-Persistenz aktiv ist."


4. Warum passiert das?

JTL-Shop führt für seinen Objektcache einen gemeinsamen Index. Einige Vorgänge, zum Beispiel ein Plugin-Update oder die Cache-Seite im Backend, laden diesen Index komplett in den Arbeitsspeicher, bei der Methode Dateien zusätzlich die Liste aller Cache-Dateien. Mit Version 2.6.0 des Plugins konnten Index und Cache-Verzeichnis auf Shops mit sehr vielen Seitenaufrufen stark wachsen. Werden sie sehr groß, reicht das PHP-Speicherlimit dafür nicht mehr aus.

Ab Version 2.6.1 legt das Plugin solche Einträge nicht mehr an und entfernt die alten von selbst, bei der Methode Dateien beim Update auch die alten Cache-Dateien.


Tags: