Archives » Shopware



Shopware Migrationen für eigene Deployments “nutzen”

Laravel Migrations

Ich stehe ja tierisch auf die Datenbank-Migrationen von Laravel. Ein PHP-Prozess der durch einen Ordner iteriert und weiß, welchen Dateien er schon importiert hat und welche nicht. Damit aber nicht genug: Mit dabei kommt eine Konsolen-Anwendung, die uns im Release-Fall bei Migrationen unterstützt und Migrationen auch wieder resetten kann.  So mag ich das. Der Prozess ist robust und an Feinheiten wie eine konfliktfreie Namenskonvention oder an eine Boilerplatte zur Klassenerstellung wurde auch gedacht.

Shopware Migrations

Einen ähnlichen Prozess finden wir auch im “internen” Entwickler-Deployment von Shopware. Die build/ApplyDeltas.php durchläuft den Ordner _sql/migrations und wendet alle gefundenen Migrations auf die Datenbank an. Die Reihenfolge wird von dem numerischen Präfix im Dateinamen der jeweiligen Klasse bestimmt, wie z.B. “101-add-extended-editor-field.php“. Dieses Präfix wird dann wiederum auch als ID in der Datenbank-Tabelle s_schema_version gespeichert, welche als “Historie” der Migrationen dient.

“Probleme” und Lösung

Gerne würde ich diesen Mechanismus auch für meine eigenen Datenbank-Deployments verwenden, aber leider “traue” ich mich das nicht. ;) Ja, Shopware fängt zwar erst bei ID 101 an, aber trotzdem kann ich nicht 100%-konfliktsicher eine eigene Migration-Klasse  mit entsprechender ID einfügen, da ich nicht weiß, ob diese von Shopware selbst belegt wird. (Hier hätte ich mir eine flexiblere Namenskonvention gewünscht) Einen eigenen Ordner und entsprechende Datenbank-Historie kann ich aber leider beim Shopware\Components\Migrations\Manager auch nicht angeben.

Als Lösung dieses Dilemmas habe ich die Shopware-Struktur entsprechend abgeleitet und euch unter https://github.com/b3nl/sw-migrations und als “Composer-Katalog”-Eintrag bereitgestellt. Die Struktur ist im Prinzip die Selbe wie beim Shopware-Original, nur dass Ihr als Konsolenparameter zusätzlich noch einen eigenen Migrationsordner und eine eigene Versionshistorie (per Tabellen-Suffix) angeben könnt – den Shopware-Basis-Ordner müsst Ihr in dem Fall aber leider angeben, da Ihr meine Komponente ja auch außerhalb von Shopware installieren könntet.

(Über Remote Inclusions braucht Ihr euch da eigentlich keine Sorgen machen, da der Pfad eigentlich nur per Konsole gesetzt werden kann. Bei Bedenken trotzdem bitte melden!)

Viel Spaß damit!

Shopware-Sessions über Redis

Hallo zusammen, da mich OXID eShop aktuell weniger reizt, bin ich sehr aktiv bei Shopware unterwegs. Bei Shopware fehlen mir leider einige Dinge in der Community Edition, die ich angefangen habe selbst nachzurüsten. Als erstes bin ich eine “fehlende” Session-Replikation über Redis angegangen. Da wir bei Shopware über einen Service-Container und entsprechende Strukturen verfügen, ist es leicht das Thema in Shopware umzusetzen. Shopware (5) selbst speichert Sessions über Zend_DB in der Datenbank. In verteilten Umgebungen könnte mir das eigentlich schon genug sein, aber da ich Schreibzugriffe auf der Datenbank eigentlich verhinden möchte, ist das für mich keine Lösung. Also zack, n Redis für die Session angedockt und ran an die Arbeit.

(mehr …)