Ein paar Tage ist es jetzt schon her, dass die 1.8er-Version von Magento veröffentlicht wurde. Ich schätze, dass trotzdem viele die Umstellung von der Version 1.7.0.2 auf die 1.8.0.0 noch nicht gemacht haben. Zwar gibt es ein paar ganz gute Seiten zum Thema Update von Magento selbst, aber weil die nicht gerade besonders übersichtlich sind und ich bei meinem ersten Update-Versuch gleich ein Problem hatte, will ich hier mein jetzt schon mehrfach erfolgreiches Vorgehen beschreiben.
Update: Bei mir hat dieses Vorgehen auch bei einem Update von 1.9.0.1 auf 1.9.1.0 gut funktioniert! Näheres, auch zu anderen Versionen findet sich in einem neueren Beitrag.
Wichtig: Auf jeden Fall sollte man sich die PHP-Fehler anzeigen lassen, sonst ist die Fehlersuche ein Blindflug. Dazu in der Datei index.php
direkt am Anfang bei „Error reporting“ ini_set('display_errors', 1);
setzen.
Bei mir gab es in einem Falle einen Fehler mit einer von mir geänderten core-Klasse (I18N). Gottseidank war das sowieso Unsinn und konnte raus. Im Fehlerfalle sollte man deshalb die eigenen Änderungen und Extensions sukzessive durchgehen — eine wirds schon sein, die die Probleme verursacht. Vielleicht sind ja welche dabei, die vermeintlich Probleme älterer Versionen beheben sollen, die können als erste raus. Bei Problemen würde ich zudem Extensions zunächst alle deaktivieren und dann eine nach der anderen wieder anstellen.
Die folgende Update-Anleitung geht davon aus, dass ein neuer Shop parallel zu einer alten Version installiert wird. Sie beschreibt also nicht, das Update einer bestehende Live-Installation, sondern vielmehr, wie ein Testsystem installiert werden kann, mit dem man erst einmal die Funktion seines Shops testen und sicherstellen kann.
Grundsätzlich muss zunächst die Datenbank kopiert und leicht angepasst werden und weiter die individuellen Shop-Dateien (Media, Skins etc.) in eine neue Installation kopiert werden. Den Rest erledigt Magento beim ersten Start der upgedateten Version dann selbst.
Datenbank kopieren
Im ersten Schritt wird also die Datenbank einer bestehenden Installation kopiert und angepasst. Man kann dies je nach benutztem Tool wahrscheinlich auf verschiedenen Wegen erreichen. In phpmyadmin gibt es eine Funktion zum Kopieren einer Datenbank, ich hab mich für den simplen Weg des Ex- und Imports entschieden.
Vor dem Export der alten Datenbank sollte man den Cache deaktivieren, damit er als Fehlerquelle beim Update keine Rolle mehr spielen kann. Dann mit dem Tool der Wahl einen Export der alten Datenbank machen, eine neue Datenbank anlegen und die exportierten Daten in die neue Datenbank importieren. Bei einem normalen SQL-Export steht am Anfang der Export-Datei zwei mal der Name der zu verwendenden Datenbank (CREATE und USE). Hier muss vor dem Import der Name der neu angelegten Datenbank eingetragen werden.
Nicht vergessen, dass der Magento-Datenbank-User auch die passenden Rechte für die neue Datenbank bekommt.
Da ich wie gesagt davon ausgehe, dass zunächst ein Test-Shop parallel zum alten Shop installiert wird, müssen in den importierten Daten die Werte für die Shop-URLs angepasst werden.
Diese Einstellungen finden sch in der Tabelle core_config_data
als key/value-Paare. Die Werte unter folgenden Keys (hier path
genannt) müssen auf jeden Fall angepasst werden:
- web/secure/base_url
- web/unsecure/base_url
Wenn Skin-, Media und JavaScript-URLs geändert hat, müssen auch diese angepasst werden. Sie finden sich unter folgenden Keys:
- web/secure/base_js_url
- web/secure/base_skin_url
- web/secure/base_media_url
- web/unsecure/base_js_url
- web/unsecure/base_skin_url
- web/unsecure/base_media_url
Damit ist die Datenbank auf dem Stand, dass es mit Magento weitergehen kann.
Magento einrichten
Archiv auspacken
Nachdem die Datenbank fertig ist, ist nun Magento selbst dran. Im ersten Schritt wird schlicht das Magento-Archiv auf dem Server ausgepackt. Danach nicht den Shop im Browser aufrufen! Es müssen erst noch ein paar Dateien kopiert werden.
Individuelle Shop-Dateien kopieren
In bzw. über die gerade ausgepackten Magento-Dateien werden nun die individuellen Dateien des alten Shops kopiert. Die folgende Liste führt nur die Dateien auf, die auf jeden Fall kopiert werden müssen. Je nachdem, was man am alten Shop individualisiert oder umgebaut hat, können weitere Dateien dazu kommen.
Kopiert werden müssen:
- Skins,
/media
,/app/code/local
,/app/code/community
,/app/etc/config.xml
falls geändert (bei mir nicht), auf jeden Fall aber die Dateilocal.xml
(hier muss mindestens die Datenbank-Verbindung angepasst werden!),- die Konfigurationsdateien der installierten Module unter
/app/etc/modules
, - die eigenen Templates unter
/app/design/frontend
, - falls geändert bzw. vorhanden:
.htaccess
undrobots.txt
sowie - ggf. Dateien aus dem
shell
-Verzeichnis.
Außerdem: Alle weiteren geänderten Dateien. Hier muss man selber wissen, wo man Änderungen vorgenommen hat. Bei einigen meiner Installationen sind dies z.B. ein paar Dateien im js
-Verzeichnis — das ist aber sehr individuell. Ich schreibe das hier v.a., weil man diese Dateien eben nicht vergessen darf.
Folgendes war bei mir jedoch ganz wichtig!
- Die Dateien des deutschen Sprachmoduls nicht mitkopieren! Die deutsche Übersetzung hat bei mir große Probleme verursacht. Schlimm ist das nicht, denn wenn der Shop erstmal läuft, kann das Sprachpaket einfach neu installiert werden.
- Eigenen Code unter
/app/code/local/Mage
zunächst nicht mitkopieren. Ich weiß, da sollte sowieso nichts hin, aber trotzdem, in einer Installation hatte ich diesen Fall. Der Aufruf von Magento brach deswegen mit ‚Undefined class constant ‚DEFAULT STRING“ ab. Bei mir reichte es, dass Mage-Verzeichnis zunächst umzubenennen, den Shop aufzurufen (s. nächsten Absatz) und das Verzeichnis dann wieder in ‚Mage‘ umzubenennen.
Shop aufrufen
Damit sind die Vorarbeiten erledigt, um den neuen Shop aufzurufen. Magento wird bei diesem ersten Aufruf weitere Installationsarbeiten erledigen, v.a. die Datenbank auf den neuesten Stand bringen. Deshalb kann dieser erste Aufruf auch recht lange dauern. Und wegen der Dinge, die Magento beim ersten Shop-Aufruf anpasst, darf auch wirklich erst jetzt, nachdem alles andere erledigt ist, der Shop das erste mal wieder aufgerufen werden.
Und der Rest
Zwei Dinge gibt es nun noch zu erledigen: Den Cache wieder aktivieren und das deutsche Sprachpaket installieren (es wurde ja nicht mit aus der alten Installation kopiert).
Wie eingangs geschrieben, hat dieses Vorgehen bei mir mehrfach ohne Probleme funktioniert. Wenns nicht klappt könnten typische Fehlerquellen v.a. nicht-kompatible Extensions, falsche Schreib-Rechte auf dem Server oder fehlende Datenbank-Rechte sein.