Türchen 09: Magento debuggen mit FIREGENTO

Als Tobi mich gefragt hat, ob ich denn Lust hätte für den Adventskalender einen kleinen Beitrag zu schreiben, konnte ich natürlich schlecht „nein“ sagen, da ich es klasse finde, dass die Webguys dieses Jahr wieder den Adventskalender ins Leben gerufen haben. Danke Jungs! In mein “Türchen” stelle ich zum einen das Modul FIREGENTO selbst vor, was einem Entwickler beim Debuggen von Magento praktisch helfen kann, ein paar weitere nützliche Module, sowie die Idee hinter FIREGENTO an sich.

Die Idee für das Modul FIREGENTO entstand auf dem Magento Developers Paradise auf Mallorca durch verschiedene Gespräche mit Magento Entwicklern aus aller Welt. An einem Abend auf Mallorca setzten sich dann Jörg Weller (Flagbit) und ich mich hin und entwickelten die erste Grundfunktionalität. Ziel war ee, Rewrite Conflicts bei den installierten Modulen schneller zu erkennen, da das einer der Hauptgründe ist, warum manche Module einfach nicht out-of-the-box funktionieren bzw. funktioniert haben und manchen Entwicklern unnötig viel Support-Aufwand beschert hat.

Was sind überhaupt Rewrite Conflicts?

Nehmen wir einmal an, es gibt das Modul Barcamp_Email, welche die Klasse Mage_Core_Model_Email_Template überschreibt, weil es irgendeine supertolle Aktion ausführen möchte. Allein installiert würde das Modul reibungslos funktionieren. Nun gibt es aber noch das Modul Foocamp_Email, welches ebenfalls die Klasse Mage_Core_Model_Email_Template überschreibt, um seinerseits noch eine supertolle Aktion auszuführen. Da Magento aber keine Vererbungsketten erlaubt, wird das Modul Foocamp_Email bevorzugt behandelt, da es den „höheren“ Namespace besitzt. Somit wird die supertolle Aktion vom Modul Barcamp_Email niemals ausgeführt werden. Mit FIREGENTO kann man nun solche Konflikte schneller erkennen und entsprechend beheben.

Die Funktionen von FIREGENTO

Kommen wir nun zu den bisher implementierten Funktionen von FIREGENTO, welche alle in einem eigenen Reiter im Backend gruppiert sind und so schnell erreicht werden können.

Durch meine Tätigkeit als Magento Entwickler saß ich schon vor den unterschiedlichsten Magento Shop mit den verrücktesten installierten Modulen. Meistens rief ein Kunde an und sagte: „Das Modul funktioniert nicht.“ Nun interessiert mich als Entwickler natürlich als allererstes: „Welche Module sind überhaupt installiert?“ - denn so kann man mit etwas Erfahrung eine mögliche Fehlerquelle manchmal schon relativ schnell eingrenzen. Dazu gibt es eine eigene Ansicht namens „Überprüfe Module“:

screenshot_01-650x301

Dort sieht man zum einen, welche Module installiert sind, in welchem CodePool sie liegen und ob sie aktiviert/deaktiviert sind. Weitere Prüfungen sind ob der Modul-Pfad existiert, ob eine config.xml existiert und ob von welchen Modulen das installierte Modul abhängig ist.
Als nächstes interessieren mich die Frage, ob ein anderes installiertes Modul meine eigene Klasse überschreibt. Dabei kommen wir also zu den angesprochenen „Rewrite Conflicts“, welche sich im Menü „Überprüfe Rewrites“ befinden. Zu Demo-Zwecken sieht man die oben angesprochenen Rewrites:

screenshot_02-650x302

Die Liste ist natürlich im Idealfall leer, kann aber auch schon einmal locker 100 Einträge fassen, wenn man diverse Module installiert hat. Zusätzlich liegt im Github-Repository noch eine Datei „firegento.php“, welche auch bequem in das Root-Verzeichnis einer Magento-Installation kopiert werden kann. Die Datei ermöglicht einen schnellen Rewrite-Check ohne dass man das ganze Modul installieren muss.
Weitere Möglichkeiten mit FIREGENTO zu debuggen, ist die Auflistung aller überwachten Events in Magento, die Auflistung und der Check von allgemeinen Informationen wie Flat Catalogs, Caches, Indizes, Systemeinstellungen, etc., sowie einer einsehbaren phpinfo().
Das Thema „Logs“ ist auch immer ein ganz spannendes Thema, da dort oftmals auch mögliche Fehlerursachen zu finden sind. Dabei kann es mitunter Shop-Betreiber geben, die einem keine FTP/SSH-Zugangsdaten zusenden möchten. Dazu gibt es in FIREGENTO das Menü „Logs“, wo man „console-like“ sich eine Log-Datei ansehen kann:

screenshot_03-650x318

Als Entwickler kommt es mehr oder weniger regelmäßig vor, dass man eine Erweiterung im Frontend testen muss und dabei bestimmte Debug-Ausgaben braucht, beispielsweise $product->debug(). Dabei kann es auf Dauer natürlich schon etwas ineffizient vom Prozess her sein, wenn man dabei immer die entsprechenden Log-Dateien öffnen muss oder immer in die Konsole springen muss um das Ergebnis zu sehen. Um dies etwas effizienter zu gestalten, unterstützt FIREGENTO von Haus aus die Firebug-Addons FirePHP (https://addons.mozilla.org/en-US/firefox/addon/firephp/) und FireLogger (http://firelogger.binaryage.com/#php) mit denen man sich PHP-Ausgaben direkt in der Firebug-Console ausgeben lassen kann.

screenshot_04-650x350
screenshot_05-650x261

Sobald entsprechende Addons auch für andere Browser veröffentlicht worden sind, werden wir diese natürlich ebenfalls implementieren.
Im Großen und Ganzen war das die bisher implementierte Funktionen - weitere Funktionen sind bereits in der Entwicklung oder stehen auf der Roadmap. Von dem her ist das Modul natürlich noch sehr ausbaufähig, jedoch für die tägliche Arbeit . Falls jemand von euch deshalb weitere Feature-Wünsche hat oder (was mich persönlich sehr freuen würde) gerne mitarbeiten möchte, darf er/sie sich gerne mit mir in Verbindung setzen.

Das Modul könnt ihr bis jetzt ausschließlich auf Github finden: https://github.com/firegento/firegento Demnächst dann vermutlich auch ganz bequem über MagentoConnect.

Weitere Module für das Debugging von Magento

Nun ist FIREGENTO natürlich nicht das einzige Modul, welches sich mit dem Thema „Magento Debugging“ beschäftigt. Deshalb hier noch eine kleine, unvollständige Liste:

Falls ihr noch weitere Module kennt, die ihr bei eurer täglichen Arbeit zum Debugging von Magento einsetzt, würden wir uns über Kommentare und Anregungen sehr freuen.

FIREGENTO - Die Idee dahinter

Jörg und ich haben uns eines Tages einmal darüber unterhalten, dass es doch eigentlich ganz geschickt wäre, wenn man Module auch ohne bestimmten Bezug zu einer Firma veröffentlichen könnte, um einen Beitrag zur tollen Magento-Community leisten zu können, ohne dass das ganze einen kommerziellen Touch bekommt.

Basierend auf unserer Zusammenarbeit an FIREGENTO ist dann die Idee entstanden, dass wir den Namespace „Firegento“ etc. auch für andere Module von anderen Entwicklern zur Verfügung stellen möchten, die ihre Module als open-source veröffentlichen möchten. Gerade beim Foocamp/Fodcamp von Damian sind dabei einige tolle Module entstanden, wie man hier bei den Webguys in dem ein oder anderen Blogbeitrag lesen kann.

Falls sich jemand von euch angesprochen fühlt oder sich mal intensiver darüber unterhalten möchte, dürft ihr euch gerne mit mir in Verbindung setzen. Wir würden uns sehr freuen, wenn ihr gemeinsam mit uns einen Beitrag zur Magento-Community leistet :-)

Fazit

Die vorgestellten Module helfen natürlich auch nur bis zu einer bestimmten Grenze. Gegen Core-Hacks, schlecht überladene Klassen, etc. ist man natürlich als Entwickler mehr oder weniger machtlos, da dies manchmal nur sehr schwer herauszufinden ist.
Ziel sollte es deshalb primär immer sein, seine eigene Code-Qualität zu steigern, so wenig Rewrites, etc. wie möglich zu verwenden um die Kompatibilität des eigenen Moduls zu anderen Modulen zu gewährleisten. Gerade das Event-Observer-Pattern in Magento ist sehr mächtig und für viele Änderungen vollkommen ausreichend.
In diesem Sinne, Happy Debugging :-)



Ein Beitrag von Rieker Rouven
Rieker's avatar

Rouven Alexander Rieker (@therouv) beschäftigt sich seit vielen Jahren professionell mit PHP, MySQL, Magento und dem Zend Framework. Magento setzt er schon seit einer der ersten Versionen ein. Er hat diverse Module für das Shop-System entwickelt und ist Autor mehrerer Bücher und Artikel zum Thema Magento. Rouven ist Gründer und Geschäftsführer der ITABS GmbH.

Alle Beiträge von Rieker

Kommentare
Kozure am

Danke für die hilfreichen Werkzeuge.

Könnt ihr bitte ein Beispiel veröffentlichen, wie firephp in magento aus den php Skripten aufgerufen wird.

Den String Mage::helper('firegento/log')->firephp(VARIABLE); habe ich im Internet gefunden.

Können auch die Firephp Optionen ::ERR und ::LOG verwendet werden?

Hilfe, in Magento funktioniert [Feature] nicht – was kann ich tun? am

[...] größer die Anzahl der eingesetzten Extensions, desto größer ist die Gefahr von Rewrite Conflicts. Die Extension firegento-debug hilft dabei, Abhängigkeiten zwischen Modulen und Rewrite-Konflikte [...]

nikolas am

Zunächst mal danke für den ausführlichen Text und natürlich das Modul und Script! Ich wüsste gerne, wie ihr bei einem Rewrite Konflikt vorgehen würdet. Den Code komplett aus einer Moduldatei in die andere übernehmen und den entsprechenden Teil des anderen Moduls entfernen oder doch per oder Erweiterung der Modulklasse B im Modul A? Ich hoffe, dass ist halbwegs verständlich...

MGrossmann am

Hallo, Erst mal ein tolles Modul. Danke schön.

Es scheint jedoch Probleme beim erkennen von class rewrites geben, wenn diese nicht am gleichen Dateipfad deffiniert sind. Ich habe auf Githup (https://github.com/firegento/firegento/issues/2) einen Bugreport geschrieben. Gruß,

M. Grossmann

JHelmet am

Abend,

super Erweiterung.

Eine kleine Frage, wie benutze ich dann FirePHP? Bei mir (CE 1.6.0.1) tut sich auf der Konsole leider nichts, wenn ich es wie auf der FirePHP Seite benutze. In der Konfiguration sind FirePHP aktiviert.

MfG

JHelmet

Rouven am

Hm.. Schwer zu sagen. Wenn ich alleine den Support-Aufwand für ein paar Module nehme, dann hat sich allein durch FIREGENTO der Aufwand halbiert. Also 50% mehr Zeit, die man für Projekte oder entsprechend neue Features, etc. verwenden kann.

Tobias Vogt am

Top Beitrag! Was schätzt du: Wie schwer wäre es für dich auf die Tools zu verzichten?

Dein Kommentar