Wir haben dieses Problem atm:
Ein Kunde erhält ein Upgrade seines Shops von CE 1.4 auf CE 1.8. Das Datei-Upgrade verlief gut, und das Datenbank-Upgrade verlief auch auf unserer Entwicklungsmaschine gut.
Wenn wir versuchen, die Live-Datenbank des Kunden auf seiner Live-Maschine zu aktualisieren (verbinden Sie das 1.8-Magento mit der Datenbank und öffnen Sie es im Browser), scheint der Prozess eine Weile zu laufen und endet mit einem 500-Fehler.
Das PHP-Fehlerprotokoll ist leer. Da es sich um einen gemeinsam genutzten Host handelt, können wir die Apache- oder MySQL-Einstellungen nicht ändern. Der Hoster, obwohl "spezialisiert im Magento Hosting", ist nicht bereit, die Einstellungen zu ändern und sagt mir, dass ich das Datenbank-Upgrade abschließen könnte, indem ich das Browser-Fenster wiederholt aktualisiere, wenn der 500-Fehler auftritt, da Magento dann in kleinen Schritten aktualisiert wird . Dies kann stundenlang dauern.
Meine Frage ist jetzt:
- Ist das wahr? Ich dachte, die SQL-Anweisungen für Datenbank-Upgrades würden in eine Transaktion eingeschlossen, sodass sie zurückgesetzt werden könnten, wenn etwas schief geht.
- Könnte die Antwort einen Hinweis geben, wo ich im Code nachsehen könnte, um die Antwort auf diese Frage zu finden?
Vielen Dank für Ihre Zeit!
quelle
Antworten:
Ihre technischen Instinkte sind solide, aber was in der realen Welt der Unternehmensgründung passiert, ist komplizierter / hässlicher.
Das Setup-Ressourcensystem von Magento funktioniert nicht einzelnen Skripte in eine Transaktion ein. Es gibt viele Gründe dafür, aber ich bin immer davon ausgegangen, dass Magento ursprünglich explizit an MySQL gebunden war und dass viele / die meisten Datendefinitionsanweisungen (
ALTER TABLE
usw.) in MySQL ein implizites Commit verursachen .Während Sie einzelne Setup-Ressourcen finden, verwenden Sie manchmal Transaktionen.
Das System selbst führt nur die Skripte aus und hofft auf das Beste.
Wenn Sie an dem Code interessiert sind, der diese Ressourcen ausführt, ist der beste Ausgangspunkt wahrscheinlich hier
Die
_modifyResourceDb
Methode enthält die eigentlichen Setup-RessourcenskriptsEine sehr hackige Lösung für Ihr Problem wäre ein temporärer Core-Hack / Code-Pool-Override, der explizit nach 5-10 include beendet wird, und führen Sie ihn erneut aus. Dies würde die Wahrscheinlichkeit verringern, dass ein Setup-Ressourcenskript nach der Hälfte des Zeitraums nicht mehr verfügbar ist.
Eine bessere Lösung und eines meiner persönlichen "Vielleicht eines Tages" -Projekte wäre ein benutzerdefiniertes Skript, das mithilfe von Magento-Kernmethoden die anzuwendenden Updates prüft, auflistet und die Benutzer einzeln ausführen lässt.
quelle