Besser entwickeln mit Magerun - Teil 3: Die wichtigsten Befehle für Entwickler

Im letzten Teil unserer Blogserie über Magerun (v1.97.22) haben wir Tools für Administratoren vorgestellt, die die Arbeit auf der Konsole vereinfachen und sicherer machen. Der heutige dritte Teil ist an die Entwickler gerichtet mit Themen rund um die Datenbank, Konfigurationen aus Magento auslesen und ändern, eigene Modulentwicklung und Debugging.

Die Hilfe-Funktion von Magerun

Da man nicht immer jede Option und jedes Argument eines Befehls im Hinterkopf haben kann, bietet Magerun selbstverständlich auch eine Hilfe für seine Befehle an. Somit habt ihr immer einen Überblick, wenn sich Optionen oder Argumente in neuen Versionen verändert haben, ohne ständig auf die Online-Dokumentation wechseln zu müssen.

Wann immer ihr also einen Befehl nachschlagen müsst, gebt Folgendes in eurer Konsole ein:

magerun help [command] // Beispiel
magerun db:info --help // Alternativ
magerun help db:info

Datenbank

Zur einfachen Verwaltung von Datenbanken mit Magerun haben wir im letzten Artikel einige Möglichkeiten aufgezeigt. Wir steigen jetzt tiefer ein, um Magerun noch effektiver nutzen zu können. Schaut man sich die Hilfe zum Dump-Befehl an, findet man dort einige nützliche Funktionen, die einem Entwickler viel Zeit ersparen.

Fallbeispiel: Dump vom Liveserver

Wir haben ein Problem auf dem Liveserver mit einigen Produkten, die wir aktuell noch nicht auf unserem Entwicklungssystem kennen. Jetzt besitzt die aktuelle Live-Datenbank allerdings eine Größe von ca. 2,4 GB. Bis die Datenbank dann vom Live-Server kopiert, eventuell komprimiert, lokal entpackt und in die eigene Datenbank eingespielt ist, vergehen problemlos 30 Minuten oder mehr. Wertvolle Zeit, wenn man bedenkt, dass gar nicht alle Daten benötigt werden.

Die Lösung lautet "strip". Die Strukturen der Tabellen werden zwar erstellt, der Inhalt wird aber nicht mitkopiert. Die Option strip kann dabei per Leerzeichen getrennte Tabellennamen annehmen. Sinnvoll für Tabellen, die nicht von Magento direkt kommen, aber größere Mengen an Daten enthalten. Es gibt auch einige vordefinierte Tabellengruppen von Magerun für spezielle Zwecke. In unserem Fall interessieren uns keine Logs, Kundendaten und Verkaufsdaten, so dass wir die Gruppe "@development" nutzen können.

Mit einer Komprimierung durch GZIP sieht der Befehl wie folgt aus:

magerun db:dump --strip="@development" -c gz

Aus einer ehemals 2,4 GB Datenbank werden innerhalb von 8 Sekunden 21 MB. Das Herunterladen und Einspielen ist in 3-5 Minuten erledigt. Und trotz allem besitzen wir noch einen voll funktionsfähigen Magento-Shop zum Weiterarbeiten.

Noch spezieller wird es, wenn wir nur eine Tabelle benötigen, zum Beispiel die core_config_data. Leider gibt es diese Möglichkeit nicht im Standardpaket von Magerun. Aber immerhin bietet es eine Erleichterung:

magerun db:dump core_config_data --only-command

Auf Live-Servern existieren lange, kryptische Passwörter, Benutzernamen, ein anderer Datenbankhost und der generierte Datenbankname.

Mit der oben genannten Befehlszeile erhalten wir einen vollständigen mysqldump-Befehl, den wir nur noch um die gewünschte Tabelle erweitern müssen:

mysqldump --single-transaction --quick -h'hostname/IP' -u'username' -p'password' 'database' core_config_data | LANG=C LC_CTYPE=C LC_ALL=C sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > 'core_config_data.sql'

Konfigurationen auslesen & ändern

Die wichtigsten Daten, damit ein Magento-Shop überhaupt erst einmal läuft, stehen in der Tabelle core_config_data. Gerne werden Tools wie PhpMyAdmin, HeidiSql oder ähnliche benutzt, um schnell und einfach Informationen aus der Datenbank zu holen oder auch zu ändern.

Wer mit der Shell unterwegs ist, kann dies ganz unkompliziert mit Magerun erledigen:

n98-magerun.phar config:get web/*

Mit diesem Aufruf sehen wir auf der Konsole eine Tabelle mit allen Konfigurationselementen, die mit dem Pfad "web" beginnen.

Um bei unserem Beispiel zu bleiben: Wir haben eine Live-Datenbank lokal eingespielt, allerdings steht die Base-URL noch fest in der Datenbank und jeder Seitenaufruf lokal wird auf den Live-Shop weitergeleitet. Wir hängen noch folgendes Argument an den oben genannten Befehl an:

n98-magerun.phar config:get web/* --magerun-script

Der neue Aufruf zeigt für jeden gefundenen Eintrag einen Befehlssatz für config:set an. Somit lässt sich die gewünschte Zeile einfach kopieren, der Wert wird geändert und ausgeführt.

Beispiel:

magerun config:set --scope-id=0 --scope=default -- 'web/secure/base_url' 'https://magento-1924.local/'

Modul entwickeln

Wer nicht täglich neue Module für Magento entwickelt und die Developer Documentation nicht auswendig kennt, kann sich mit Magerun ein Grundgerüst für ein neues Modul erstellen lassen:

magerun dev:module:create --add-all --add-readme --add-composer --author-name="Timo Klement" --author-email="timo.klement@tudock.de" --description="DemoModul mit Magerun erstellt." Custom DemoModul local

Mit diesem Aufruf hat Magerun unter dem Namespace Custom_DemoModul ein Grundgerüst für ein neues Magento-Modul bereitgestellt. Zusätzlich zu den Verzeichnissen erhalten wir noch eine vorbereitete config.xml, composer.json und eine ordentlich aufbereitete readme.md. Damit der Shop das Modul auch erkennt, wurde im app/etc/modules Verzeichnis eine Custom_DemoModul.xml Datei angelegt, in der das Modul gleich schon aktiviert ist. Damit kann das Entwickeln losgehen.

Soll das Modul noch nicht sofort aktiv sein, lässt es sich wie folgt auf der Konsole wieder deaktivieren:

magerun dev:module:disable Custom_DemoModul

Debugging

Bei der Entwicklung von eigenen Modulen mit Magento ist es oft hilfreich zu sehen, ob der eigene Code noch performant ist. Je mehr Erweiterungen eingesetzt werden, umso schlechter wird die Performance. Dies ist ein generelles Problem und nicht nur bei Magento so. Aber um mit dem eigenem Modul nicht auch noch die Performance im Shop zu verringern, bietet Magento einen eigenen Profiler an.

Profiler aktivieren

Im Root-Verzeichnis von Magento liegt die index.php. Um den Profiler von Magento zu aktivieren, ändert folgende Zeile:

#Varien_Profiler::enable();

in

Varien_Profiler::enable();

Dieser Zustand sollte nur in Entwicklungsumgebungen verwendet werden.

Der Profiler ist aktiviert. Allerdings weiß Magento noch nicht, für welchen Store wir ihn einsetzen wollen. Mit Magerun sieht der Befehl wie folgt aus:

magerun dev:profiler

Als Nächstes fragt Magerun uns nach dem Store. Wir entscheiden uns im Demoshop für den "default". Im Browser erscheint am Ende nun ein Link "profiler" und darunter eine Tabelle. Der Profiler zeigt uns an, welches Modul beziehungsweise welche Methode wie lange zum Laden benötigt, wie oft sie aufgerufen wurde und wieviel Speicher belegt wurde. Damit sind wir in der Lage zu erkennen, ob es in unserem Modul Probleme mit der Performance gibt.

Ein erneuter Aufruf des Magerun-Befehls schaltet den Profiler für den gewählten Store wieder ab. Und nicht vergessen in der index.php den Profiler ebenfalls wieder abzuschalten.

Damit sind wir schon am Ende des dritten Teils unserer Blogserie über Magerun. Ich hoffe, euch mit diesen Tipps meine Begeisterung für Magerun vermitteln zu können. Natürlich wünsche ich mir auch, dass sie euch das Arbeiten mit Magento erleichtern.

Autor: Kategorie: Webentwicklung
Schlagwörter: Magento, Wissen
YTo2OntzOjY6ImZldXNlciI7aTowO3M6MzoicGlkIjtpOjk3O3M6MzoiY2lkIjtpOjEwOTcxMjQyNzE7czo0OiJjb25mIjthOjEwOntzOjEwOiJzdG9yYWdlUGlkIjtpOjEyNDtzOjE0OiJleHRlcm5hbFByZWZpeCI7czoxMToidHhfbmV3c19waTEiO3M6MTM6IlVzZXJJbWFnZVNpemUiO2k6MTg7czo5OiJhZHZhbmNlZC4iO2E6MTp7czoyMToic2hvd0NvdW50Q29tbWVudFZpZXdzIjtpOjA7fXM6ODoic2hhcmluZy4iO2E6MTp7czoxMjoidXNlU2hhcmVJY29uIjtOO31zOjg6InJhdGluZ3MuIjthOjM6e3M6MTY6InJhdGluZ0ltYWdlV2lkdGgiO2k6MTE7czoxNjoicmV2aWV3SW1hZ2VXaWR0aCI7aToxNjtzOjg6Im1vZGVwbHVzIjtzOjQ6ImF1dG8iO31zOjY6InRoZW1lLiI7YTo3OntzOjI2OiJib3htb2RlbFRleHRhcmVhTGluZUhlaWdodCI7aTozMDtzOjI0OiJib3htb2RlbFRleHRhcmVhTmJyTGluZXMiO2k6NDtzOjE1OiJib3htb2RlbFNwYWNpbmciO2k6MTA7czoxODoiYm94bW9kZWxMaW5lSGVpZ2h0IjtpOjIwO3M6MTg6ImJveG1vZGVsTGFiZWxXaWR0aCI7aToxMzQ7czoyNjoiYm94bW9kZWxMYWJlbElucHV0UHJlc2VydmUiO2k6MTtzOjIyOiJib3htb2RlbElucHV0RmllbGRTaXplIjtpOjM1O31zOjE3OiJwcmVmaXhUb1RhYmxlTWFwLiI7YToxMDp7czoxNDoidHhfYWxidW0zeF9waTEiO3M6MTc6InR4X2FsYnVtM3hfaW1hZ2VzIjtzOjE1OiJ0eF9jb21tZXJjZV9waTEiO3M6MjA6InR4X2NvbW1lcmNlX3Byb2R1Y3RzIjtzOjEyOiJ0eF9pcmZhcV9waTEiO3M6MTA6InR4X2lyZmFxX3EiO3M6MTU6InR4X21pbmluZXdzX3BpMSI7czoxNjoidHhfbWluaW5ld3NfbmV3cyI7czo5OiJ0eF90dG5ld3MiO3M6NzoidHRfbmV3cyI7czoxMToidHRfcHJvZHVjdHMiO3M6MTE6InR0X3Byb2R1Y3RzIjtzOjI0OiJ0eF93ZWNzdGFmZmRpcmVjdG9yeV9waTEiO3M6MjU6InR4X3dlY3N0YWZmZGlyZWN0b3J5X2luZm8iO3M6MTI6InR4X2NvbW11bml0eSI7czo4OiJmZV91c2VycyI7czoxOToidHhfY3d0Y29tbXVuaXR5X3BpMSI7czo4OiJmZV91c2VycyI7czoxMToidHhfbmV3c19waTEiO3M6MjU6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3MiO31zOjExOiJzaG93VWlkTWFwLiI7YTo1OntzOjk6InR4X3R0bmV3cyI7czo3OiJ0dF9uZXdzIjtzOjExOiJ0dF9wcm9kdWN0cyI7czo3OiJwcm9kdWN0IjtzOjEyOiJ0eF9jb21tdW5pdHkiO3M6NDoidXNlciI7czoxOToidHhfY3d0Y29tbXVuaXR5X3BpMSI7czoyNToiYWN0aW9uPWdldHZpZXdwcm9maWxlJnVpZCI7czoxMToidHhfbmV3c19waTEiO3M6NDoibmV3cyI7fXM6MTI6IlJlcXVpcmVkTWFyayI7czoxOiIqIjt9czo0OiJsYW5nIjtzOjI6ImRlIjtzOjM6InJlZiI7czoyOToidHhfbmV3c19kb21haW5fbW9kZWxfbmV3c18yNzEiO30%3DYTo0OntzOjQ6ImNvbmYiO2E6MzU6e3M6MTc6InVzZVdlYnBhZ2VQcmV2aWV3IjtzOjE6IjEiO3M6MjI6InVzZVdlYnBhZ2VWaWRlb1ByZXZpZXciO3M6MToiMSI7czoyMDoid2VicGFnZVByZXZpZXdIZWlnaHQiO3M6MjoiNzAiO3M6MjA6Im1heENoYXJzUHJldmlld1RpdGxlIjtzOjI6IjcwIjtzOjMxOiJ3ZWJwYWdlUHJldmlld0Rlc2NyaXB0aW9uTGVuZ3RoIjtzOjM6IjE2MCI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvbk1pbmltYWxMZW5ndGgiO3M6MjoiNjAiO3M6Mjc6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lUGFnZSI7czozOiIxODAiO3M6MzM6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lVGVtcEltYWdlcyI7czoyOiI2MCI7czozMDoid2VicGFnZVByZXZpZXdDYWNoZUNsZWFyTWFudWFsIjtzOjE6IjAiO3M6Mjg6IndlYnBhZ2VQcmV2aWV3TnVtYmVyT2ZJbWFnZXMiO3M6MjoiMTAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbmltYWxJbWFnZUZpbGVTaXplIjtzOjQ6IjE1MDAiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbkltYWdlU2l6ZSI7czoyOiI0MCI7czozMDoid2VicGFnZVByZXZpZXdTY2FuTWF4SW1hZ2VTaXplIjtzOjM6IjQ1MCI7czoyOToid2VicGFnZVByZXZpZXdTY2FuTWluTG9nb1NpemUiO3M6MjoiMzAiO3M6MzE6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnMiO3M6MjoiNDAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnNGb3JMb2dvIjtzOjI6IjU1IjtzOjQwOiJ3ZWJwYWdlUHJldmlld1NjYW5NYXhIb3J6aXpvbnRhbFJlbGF0aW9uIjtzOjI6IjU7IjtzOjM3OiJ3ZWJwYWdlUHJldmlld1NjYW5tYXh2ZXJ0aWNhbHJlbGF0aW9uIjtzOjE6IjMiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2NhbkxvZ29QYXR0ZXJucyI7czoxMDoibG9nbyxjcmdodCI7czozODoid2VicGFnZVByZXZpZXdTY2FuRXhjbHVkZUltYWdlUGF0dGVybnMiO3M6NTc6InBpeGVsdHJhbnMsc3BhY2VyLHlvdXR1YmUscmNsb2dvcyx3aGl0ZSx0cmFuc3BhLGJnX3RlYXNlciI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvblBvcnRpb25MZW5ndGgiO3M6MjoiNDAiO3M6MjU6IndlYnBhZ2VQcmV2aWV3Q3VybFRpbWVvdXQiO3M6NDoiNzAwMCI7czoxMjoidXNlUGljVXBsb2FkIjtzOjE6IjAiO3M6MTI6InVzZVBkZlVwbG9hZCI7czoxOiIwIjtzOjEzOiJwaWNVcGxvYWREaW1zIjtzOjM6IjEwMCI7czoxNjoicGljVXBsb2FkTWF4RGltWCI7czozOiI4MDAiO3M6MTY6InBpY1VwbG9hZE1heERpbVkiO3M6MzoiOTAwIjtzOjIyOiJwaWNVcGxvYWRNYXhEaW1XZWJwYWdlIjtzOjM6IjQ3MCI7czoyMzoicGljVXBsb2FkTWF4RGltWVdlYnBhZ2UiO3M6MzoiMzAwIjtzOjIwOiJwaWNVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIyNTAwIjtzOjIwOiJwZGZVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIzMDAwIjtzOjE4OiJzb3VuZGNsb3VkQ2xpZW50SUQiO3M6MDoiIjtzOjIyOiJzb3VuZGNsb3VkQ2xpZW50U2VjcmV0IjtzOjA6IiI7czoyMDoidXNlVG9wV2VicGFnZVByZXZpZXciO3M6MDoiIjtzOjI0OiJ0b3BXZWJwYWdlUHJldmlld1BpY3R1cmUiO2k6MDt9czoxMToiYXdhaXRnb29nbGUiO3M6Mjg6IldhcnRlIGF1ZiBBbnR3b3J0IHZvbiBHb29nbGUiO3M6ODoidHh0aW1hZ2UiO3M6MTM6IkJpbGQgZ2VmdW5kZW4iO3M6OToidHh0aW1hZ2VzIjtzOjE1OiJCaWxkZXIgZ2VmdW5kZW4iO30%3DYTowOnt9YTowOnt9YTo3OntzOjE2OiJjb21tZW50TGlzdEluZGV4IjthOjE6e3M6MzI6ImNpZHR4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjcxIjthOjE6e3M6MTA6InN0YXJ0SW5kZXgiO2k6MTU7fX1zOjE0OiJjb21tZW50c1BhZ2VJZCI7aTo5NztzOjE2OiJjb21tZW50TGlzdENvdW50IjtpOjEwOTcxMjQyNzE7czoxMjoiYWN0aXZlbGFuZ2lkIjtpOjA7czoxNzoiY29tbWVudExpc3RSZWNvcmQiO3M6Mjk6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjcxIjtzOjEyOiJmaW5kYW5jaG9yb2siO3M6MToiMCI7czoxMjoibmV3Y29tbWVudGlkIjtOO30%3D YTo1OntzOjExOiJleHRlcm5hbFVpZCI7aToyNzE7czoxMjoic2hvd1VpZFBhcmFtIjtzOjQ6Im5ld3MiO3M6MTY6ImZvcmVpZ25UYWJsZU5hbWUiO3M6MjU6InR4X25ld3NfZG9tYWluX21vZGVsX25ld3MiO3M6NToid2hlcmUiO3M6MTcwOiJhcHByb3ZlZD0xIEFORCBleHRlcm5hbF9yZWY9J3R4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjcxJyBBTkQgcGlkPTEyNCBBTkQgdHhfdG9jdG9jX2NvbW1lbnRzX2NvbW1lbnRzLmRlbGV0ZWQ9MCBBTkQgdHhfdG9jdG9jX2NvbW1lbnRzX2NvbW1lbnRzLmhpZGRlbj0wIEFORCBwYXJlbnR1aWQ9MCI7czoxMDoid2hlcmVfZHBjayI7czoxMzk6ImV4dGVybmFsX3JlZj0ndHhfbmV3c19kb21haW5fbW9kZWxfbmV3c18yNzEnIEFORCBwaWQ9MTI0IEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuZGVsZXRlZD0wIEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuaGlkZGVuPTAiO30%3D YToyOntpOjA7czoxNDk6IjxpbWcgc3JjPSIvdHlwbzNjb25mL2V4dC90b2N0b2NfY29tbWVudHMvcmVzL2Nzcy90aGVtZXMvdHVkb2NrL2ltZy9wcm9maWxlLnBuZyIgY2xhc3M9InR4LXRjLXVzZXJwaWMgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjtpOjk5OTk5O3M6MTUxOiI8aW1nIHNyYz0iL3R5cG8zY29uZi9leHQvdG9jdG9jX2NvbW1lbnRzL3Jlcy9jc3MvdGhlbWVzL3R1ZG9jay9pbWcvcHJvZmlsZWYucG5nIiBjbGFzcz0idHgtdGMtdXNlcnBpY2YgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjt9
Bitte bestätigen Sie
Nein
Ja
Information
Ok
Vorschau wird geladen ...
* Pflichtfeld
Ihr Kommentar ist eine Antwort auf den folgenden Kommentar

Wir behalten uns vor, Kommentare zu löschen, beispielsweise wenn sich diese nicht auf den Beitrag beziehen, zur Eigenwerbung missbraucht werden, persönliche Daten anderer enthalten, diskriminieren, beleidigen oder Rechte verletzen.

Datenschutzhinweis: Wenn Sie einen Kommentar oder sonstigen Beitrag in unserem Blog hinterlassen, speichern wir neben Ihren Angaben Ihre IP-Adresse. Darüber hinaus können Sie die Beiträge und Kommentare unseres Blogs abonnieren. Das Kommentarabonnement können Sie jederzeit abbestellen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.

E-Commerce & Webentwicklung: Wir realisieren und optimieren Internetprojekte. Unser Fachgebiet sind Onlineshops, Rich Internet Applications und anspruchsvolle Onlineauftritte. Über unsere Arbeit schreiben wir. Hier im Blog von TUDOCK.