Magento2 preview – naja fast :-)

Ich komme gerade von der meet magento und habe dort auch ein wenig über magento2 erfahren. Daher habe ich mich entschlossen, dass ich mir magento2 auf dem Weg von Leipzig nach Herne in’s schöne Ruhrgebiet mal ansehen möchte. In dem Zusammenhang kann ich auch endlich mal Git auf meinem Netbook installieren und möchte auch ein paar andere Kleinigkeinten die auch sehr interessant waren mal ausprobieren. Unter anderem z.B. das jumpstorm script und magento german setup.

Dieser kleine Bericht ist kein Tutorial oder eine Anleitung oder sowas. Es ist eher ein Roman – die Geschichte, wie ich Magento2 kennengelernt habe. :-)

Installiert habe ich also erst mal:

1. xampp-win32-1.7.7-VC9-installer.exe
Quelle: http://dfn.dl.sourceforge.net/project/xampp/XAMPP Windows/1.7.7/xampp-win32-1.7.7-VC9-installer.exe
Weitere Informationen zu xampp unter: http://www.apachefriends.org/

2. Git-1.7.10-preview20120409.exe
Quelle: http://msysgit.googlecode.com/files/Git-1.7.10-preview20120409.exe
Informationen dazu unter: http://msysgit.github.com/

Dann habe ich das Magento2 Repository unter https://github.com/magento/magento2 geforkt und mit der Git-BASH ein lokal geclonnt.

git clone https://[email protected]/msoftware/magento2.git

Das gleiche habe ich mit dem Repository von netresearch gemacht. Erst ein fork und dann git clone (https://github.com/netresearch/jumpstorm). Hier ist aber dringend darauf zu achten, dass ein rekursives clone durchgeführt wird. Da aus dem jumpstore Repository heraus auch noch andere Repositorys benötigt werden. Z.B. die Dateien unter /lib/Symfony/Component. Das es sich hier um verknüpfte Repositories handelt, kann man unter github.con auch gut an dem kleinen grünen Icon erkennen (z.B. hier https://github.com/msoftware/jumpstorm/tree/master/lib/Symfony/Component).

Und weil es so einen Spaß macht, habe ich auch direkt mal das FIREGENTO GermanSetup Repository (https://github.com/firegento/firegento-germansetup) kopiert und auch geklont.

Ja, mir ist schon klar, dass der ganze Aufwand mit dem Forken eigentlich überflüssig ist, aber wer weiß wozu es mal gut ist. Ich glaube zwar nicht, dass ich über das reine “Mal reinschauen” hinauskomme, aber wer weiß …

So weit erst mal zur Vorbereitung. Jetzt, da ich alles zusammen habe, was ich für die ersten Schritte benötige, checke ich erst mal, ob der Apache läuft und muss dann mit Hilfe von jumpstorm ein Magento aufsetzen. Vor ein paar Stunden habe ich noch einen Vortrag darüber gehört und bin sehr gespannt, ob ich das nun auch hin bekomme.

Nachdem ich http://localhost/ in die Adress-Zeile meines Browsers eingegeben habe, erscheint der mir bekannte xampp Start Screen und so wie es scheint läuft der Apache (Xampp) perfekt und ich werde mir jetzt mal jumpstore ansehen. Im Hauptverzeichnis finde ich eine PDF Datei mit dem Namen README.pdf. Der Name klingt vielversprechend und ich schaue einfach mal rein. Das PDF ist in englischer Sprache verfasst und erklärt sehr anschaulich mit vielen kleinen Beispielen die Vorgehensweise.

Als erstes sehe ich mir mal die sample.jumpstorm.ini an. Da ich nicht mit sample.jumpstorm.ini arbeiten möchte, benenne ich die Datei um in “jumpstorm.ini” und editiere sie in meinem bevorzugten vim :-) . Als erstes fällt mir auf, dass hier jemand vor dem einchecken vergessen hat das MySQL Passwort zu entfernen. Eigentlich nicht so schlimm, da es sich bei der Konfiguration ganz offensichtlich um eine lokale Entwicklungsumgebung handelt, aber es wirkt doch erst mal nicht unbedingt vertrauensbildend. Das gleiche gilt auch für das adminPass. Auch hier hätte ich mir eher einen leeren Eintrag gewünscht.

Da ich auf den ersten Blick nicht verstehe, was ich in meinem Fall unter “magento” -> “source” eintragen soll, muss ich wohl erst mal in die jumpstorm sourcen schauen. Das ist so oser so erst mal eine gute Idee, denn evtl. baut ein Blick in den Source-Code mein Vertrauen in die Entwickler wieder auf.
Nach dem öffnen der jumpstorm Datei sehe ich auf den ersten Blick das dieses Skript nicht unter Windows entwicklet wurde und daher in meinem Fall einige Anpassungen benötigt. Da es in PHP geschrieben ist, habe ich damit aber wenig Probleme und mache mich erst mal daran, jumpstorm für meine Umgebung anzupassen.

Klar, die Pfade müssen alle angepasst werden, aber ich treffe auch noch auf andere Problem.

1. In der Datei \jumpstorm\lib\Netresearch\Source gibt es eine Methode “isFilesystemPath”, die so erst mal nicht funktioniert – wenigstens unter Windows.

public static function isFilesystemPath($sourcePath)
{
return (0 === strpos($sourcePath, ‘/’)); // path is absolute filesystem path
}

Egal. Ich denke mir mal kleine Änderung – große Wirkung und ändere die Methode ein wenig ab.

public static function isFilesystemPath($sourcePath)
{
return (is_dir($sourcePath)); // path is absolute filesystem path
}

Beim nächsten Test komme ich wieder einen kleinen Schritt weiter. Als nächstes versucht das Script die Dateien per rsync zu kopieren. Das ist eine sehr gute Idee, aber unter Windows doch wieder ein Problem. Bei meiner Suche in den Sourcen finde ich 2 Stellen an denen rsync verwendet wird.

$ grep -r rsync *
lib/Netresearch/Source/Filesystem.php:
$command = sprintf(‘rsync -a -h %s %s 2>&1′, $this->source, $target);
src/Jumpstorm/Extensions.php:
$command = sprintf(
‘rsync -a -h –exclude=”doc/*” –exclude=”*.git” %s %s 2>&1′,
$source . DIRECTORY_SEPARATOR,
$this->config->getTarget()
);

Dabei denke ich natürlich direkt an Clean-Code und Refactoring und …. Aber ich kann mich bremsen und suche kurz mal bei Google nach einer geeigneten Funktion und werde unter http://aidanlister.com/2004/04/recursively-copying-directories-in-php/ fündig. Unter dem Titel Recursively copying directories in PHP hat Aidan Lister eine copyr Funktion veröffentlicht, die – so hoffe ich – auch ihren Zweck erfüllt. Zu dem Zweck habe ich ein weitere PHP Datei unter \jumpstorm\lib\AidanLister angelegt, in der ich die Datei Copyr.php mit der entsprechenden Funktion hinterlegt habe. Beim Test wird klar, warum die Kollegen von netresearch hier auf rsync gesetzt haben, denn das Kopieren der Dateien ist so ungluablich langsam, dass ich in der Zeit auch eben rsync für Windows instalieren könnte.

Nach dem Kopieren der Dateien treffe ich auf das nächste Problem. Der Nächste Schritt versucht die Anlager der MySQL Datenbank. Auch hier wir mit dem exec Kommando gearbeitet und mit Hilfe vom mysql Kommando Datenbanken gelöscht und angelegt. Da der Befehl mysql in meinem Fall nicht im Pfad ist, bekomme ich erst mal nur eine Reihe von Fehlermeldungen. Was dann dazu führt, dass die MAgento Installation mit der folgenden Exception abbricht.

[Exception]
Could not create live database

Also mysql in den Pfad aufnehmen. Bei mir liegt das Kommando mysql unter C:\xampp\mysql\bin und genau das Trage ich dann auch in meine PATH Variable ein. Während mein Test läuft und ich wieder darauf warte, dass die Dateien geladewn werden, lese ich ein wenig über das Symfony Framework. Ich selbst habe es noch nie eingesetzt und nutze die Gelegenheit, mich mal kurz damit zu beschäftigen. Unter http://symfony.com/symfony-in-five-minutes finde ich eine Zusammenfasssung des Symfony Frameworks, dass ich zwar nicht in 5 Minuten lesen kann, aber das Kopieren der Dateien lauft ja auch ein wenig länger :-) . Na toll. Mittlerweile bin ich zum Senior Symphony Developer geworden und ich sehe wieder nur die Exception. Tja, das hat wohl nicht viel gebracht. Ich greppe noch mal durch die Sourcen nach mysql und sehe, dass es nur eine Stelle gibt, an der das Kommando mysql wirklich benötigt wird. Soll ich einfach den Pfad in der Funktion prepareMysqlCommand ergänzen. Vermutlich wird es klappen, aber so macht das einfach keinen Spaß. Ich sitze ja so oder so hier im Zug fest und erst in Hannover. D.H. ich habe noch ca. 2 Stunden vor mir und daher noch genug Zeit, es richtig zu machen. Geanu in dem Moment geht mir eine Frage durch den Kopf. Warum ist es eigentlich immer so, dass es ungleich länger dauert etwas “richtig” zu machen als es mal eben rein zu fummeln? Die Antwort kenne ich zwar, aber daran will ich mich jetzt nich hoch ziehen. Statt dessen mache ich es richtig unb baue den Pfad zu mysql in die jumpstorm.ini mit ein. Auch wenn ich mir nicht ganz klar darüber bin, ob das schon ausreicht, denn eigentlich währe es noch viel besserm ganz auf den Aufruf von mysql zu verzichten und mit den PHP Methoden mysql_connect und mysql_querry zu arbeiten. Aber das habe ich schon 100 mal gemacht und heute habe ich mal Lust auf was neues.
Nachdem ich mir nun die Arbeit mit der jumpstorm.ini gemacht habe, muss ich feststellen, dass es alles nichts bringt. Der mysql Befehl wird nun zwar ordnungsgemäß gefunden, aber die Exception bleibt. Mist!
Also weiter Suchen und nicht aufgeben. Vermutlich bin ich wieder einen kleinen Schritt weiter gekommen und darf jetzt nicht aufgeben. Das ist halt das Lehrgeld dass man zahlen muss, wenn man “mal wieder was neues probieren möchte”. OK, ich schaue mir also den Teil in der Base.php noch mal genauer an. Eigentlich kann hier nicht viel passieren und daher entscheide ich mich für eine pragmatische Herangehensweise und gebe einfach mal das erzeugte mysql Kommando aus. Beim Test sehe ich was ich nicht sehen wollte. Das Passwort aus der jumpstorm.ini steht hier im Aufruf. Ach Schei… das habe ich beim vielen Schreiben ja total vergessen. Das PAsswort muss natütrlich raus aus der php.ini, da ich gar kein Passwort für meine lokale xampp Installation nutze. So weit so gut, doch alles jamern und probieren hat keinen Zweck. Irgendwie schaffe ich es nicht, diesen Konstrukt aus mysql.exe und den benötigten Parametern zu übergeben. Ich sehe mir den Return Wert an, der immer 1 statt 0 ist und suche danach bei Google. Evtl. gibt es ja eine Besonderheit unter Windows oder irgendeinen Bug – was weiß ich? Aber nichts. Ich sehe mir das Result des Aufrufs an und bekomme immer eine mysql Hilfe als Result. Das ist sehr verwunderlich und ergibt meiner Meinung nach keinen Sinn, ist aber so. Mittlerweile bin ich fast im Hamm und folge dem was meine Oma immer zu mir gesagt hat. ” Junge, bleib doch lieber bei den bewährten alten Methoden. Das ganze moderne Zeug ist doch nicht gut für Dich”. Eigentlich stimmt es nicht so ganz, denn der aufruf mysql_connect ist jünger als das mysql commando, aber das ist mir jetzt egal und ich baue die Base.php um. In der Magento.php habe ich eine ähnliche Konstruktion entdeckt, um die ich mich jetzt aber noch nicht kümmere. Ich bin mir sicher da werde ich noch ganz von allein drauf treffen. So schaffe ich es dann auch tatsächlich, dass die Datenbank angelegt wird. Hurra! Jetz kann ich also Dateien kopieren und eine leere Datenbank anlegen. Der Nächste Schritt ist die Anlage der Magento Sample Data Tabellen und Inhalte. Auch bei diesem Schritt darf ich mich über eine Exception freuen, was aber daran liegt, dass ich den Punkt noch nicht konfiguriert habe.

[Exception]

Could not detect sample data sql file in source directory git://git.example.org/magento/sampledata.git

Also muss ich nun in der jumpstorm.ini Datei die richtige Lokation der Datei angeben und schon kann es weiter gehen. So lange der Download dauert (Leider habe ich die Zip Datei noch nicht herunter geladen und im Zug ist die UMTS Verbindung leider nicht sehr stabil) schaue ich mir schon mal die Stelle an, die zu der Exception geführt hat. Ich habe ja nun schon eine Menge über jumpstorm gelernt und evtl. hilft mir das Wissen ja weiter.
Siehe da, es ist die Stelle in der Magento.php, die ich gerade noch vor mir hergeschoben habe. Was für ein Wunder. Klar muss hier wieder ein SQL Statement ausgeführt werden und klar ist auch, dass es wieder mit prepareMysqlCommand und exec gemacht wird. Dieses mal ist es aber nicht so einfach wie noch gerade. Ein einfaches DROP DATABASE oder CREATE DATABASE ist doch etwas anderes als eine mehrere 100 MB große SQL Datei einzulesen und dann mit mysql_query auszuführen. Aber ich halte mich an das was meine Oma gesagt hat und versuche, es wieder ohne exec zu machen. Doch aktuell heißt es erst mal Geduld haben und auf den Download warten. In der Zeit google ich das Problem mal. Vermutlich hat so ein Problem schon mal jemand vor mir gehabt und warum soll ich das Rad jedes mal neu erfinden. Dabei fällt mir was ein. Ich habe doch auf der Symphonny Website gelesen, dass es bei einem guten Framework darauf ankommt, dass man das Rad nicht jedes mal neu erfinden muss. Dementsprechend ist das Internet irgendwie auch ein Framework. Man kann es nicht so ohne weiteres benutzen, aber hier findet man auch zu fast jedem Problem eine Lösung, da man so gut wie nie der erste ist, der darauf gestoßen ist … und wenn doch? Dann hat man vermutlich etwas tatal falsch gemacht und sollte lieber alles löschen und noch mal von Vorne anfangen.

So, der Download ist fertig und ich bin in Dortmund. Mist. Selbst mit Verspätung hat die Zeit nicht gereicht. Ich muss in 10 Minuten aussteigen und dann ist erst mal Sense mit Magento2. In den nächsten Tagen werde ich wohl erst mal nicht mehr dazu kommen, hier weiter zu arbeiten. Außerden sehe ich keinen Grud darain, mein Netbook in die Hand zu nehmen, wenn ich einen richtigen Rechner habe.

So wie es aussieht ist das der Punkt an dem ich erst mal aufgeben muss. Ja, ich weiß, dass Magento nicht für Windows gemacht wurde und das hat so wie es scheint auch einen Hintergrund :-) . Ich werde das ganze wohl noch mal in Ruhe auf einem Linux Server probieren und gebe damit zurück an die anderen Webseiten.

Michael Jentsch

Michael Jentsch arbeitet seit 2006 bei der Itellium Services GmbH als Entwickler und Software Architekt. Er ist spezialisiert auf Java basierte Web-Applikationen und E-Commerce. Neben dem Beruf interessiert er sich auch für Suchmaschinenoptimierung und ist engagiert in vielen Open Source Projekten im Web Umfeld. Sie erreichen ihn per E-Mail unter [email protected].

More Posts

Weiterführende Themen:

  1. Firefox Marktanteil fast bei 20%

Comments

  1. X.Commerce says:

    Hi, die meet magento war echt klasse. Habe mir mal Deine Geschichte durchgelesen und habe mich gut amüsiert. Echt klasse so ein Live Developer Blog Ding. So was muss ich auch mal versuchen. Schade, dass Du es nicht geschafft hast. Aber wenn ich Dich mal kurz daran erinnern darf,dass Du ja ein Remote GitHUB Repository gewählt hast. Einfach alles einchecken und auf einer anderen Maschine weiter machen. Dann brauchst Du Dich nicht mit dem Netbook Dingsda rumärgern.
    Ich würde gerne eine Fortsetzung lesen und das Ende erfahren.

«
facebook this
"));