Open Source im professionellen Einsatz
Linux-Magazin 06/2009
© Christopher Robin, Pixelio.de

© Christopher Robin, Pixelio.de

Perl führt Buch über Online-Bestellungen

Wer liefert wann?

Eine Datenbank auf der Grundlage des verteilten Versionskontrollsystems Git merkt sich mit Hilfe eines Perl-Skripts Bestellungen aus dem Internet und hilft so den Überblick zu wahren. Bei Wareneingang aktualisiert der Käufer seine Lagerbestände.

739

Wer wie ich oft und gern günstige Produkte im Internet bestellt, ist womöglich zuweilen unsicher, ob das Bestellte drei Tage später tatsächlich ankommt. Im Kaufrausch verliert der Schnäppchenjäger dann den Überblick. Was liegt also näher, als abgeschickte Bestellungen in eine Datenbank aufzunehmen und diese dann bei Wareneingang aufzufrischen? Die Datenbank sollte freilich immer dort verfügbar sein, wo der Kaufwütige seinem Bestellwahn erliegt.

Das aber kann überall sein: Im Büro, zu Hause oder vielleicht per Laptop aus einem billigen Motelzimmer (Abbildung 1). Dort gibt es womöglich gar keinen Netzanschluss und der Käufer, sollen ihn nicht seine Erwerbungen überrollen, muss die Datenbank zunächst lokal auf dem Laptop pflegen, um sie erst später via Internet zu aktualisieren.

Abbildung 1: Das zentrale Git-Repository auf einem gehosteten Server dient als Austauschpunkt zwischen den einzelnen lokalen Repositories zu Hause, in der Arbeit und unterwegs.

Für eine solche Datenbank bietet sich das verteilte Versionskontrollsystem Git [2] an. Von Kernel-Zampano Linus Torvalds ursprünglich eigenhändig in zwei Wochen zusammengeklopft, um das proprietäre Produkt Bitkeeper abzulösen, verwaltet Git heutzutage den Linux-Kernel und kann blitzschnell Tausende von Dateien patchen und mergen. Bei der hier anstehenden Aufgabe ist die Geschwindigkeit jedoch eher irrelevant. Praktisch ist nur, dass Git mit seinem eingebauten Replikationsmechanismus ohne große Klimmzüge mehrere verteilte Verzeichnisse synchronisieren kann.

Immer alles am Mann

Informationen über Internetkäufe und deren geschätzte Liefertermine liegen dabei in einem Cache auf der lokalen Festplatte. Das dafür verwendete Modul legt für jeden Zugriffsschlüssel eine eigene Datei an. Das entsprechende Verzeichnis versioniert Git in einem lokalen Repository, wie es für ein verteiltes Versionskontrollsystem typisch ist. Entwickler haben so auch ohne Internetzugang und ohne zentrale Repositories zu stören vollen Zugriff auf alle Funktionen. Sie können neue Versionen einchecken, alte hervorholen, parallele Entwicklungszweige (Branches) erzeugen oder mit anderen mischen und vieles mehr.

Um das lokale Repository mit anderen Rechnern zu synchronisieren, führt der lokale Benutzer einen Push auf das zentrale Repository aus, das auf einem gehosteten Rechner im Internet liegt. Letztlich ist jedoch kein Git-Repository wirklich zentral, es bleibt jedem selbst überlassen, mit welcher Instanz er Kontakt aufnimmt, um Patches oder neue Features herunterzuladen.

Sitzt der Kaufwütige später am Laptop, kann er sich aus der zentralen Instanz mit »git clone« einen Klon bauen, den er dann nicht nur Internet-los abfragen und mit neuen Daten füttern kann, sondern bei wieder bereitstehender Verbindung einfach mit der zentralen Instanz synchronisiert.

An den Haaren aus dem Sumpf

Wer diese Lösung implementieren will, der legt, wie die Abbildung 2 zeigt, auf dem Hosting-Server mit SSH-Zugang zuerst mit Hilfe von »git init« ein leeres Git-Repository an. Dafür erzeugt er schlicht ein neues Verzeichnis, springt hinein und führt dort »git init« aus. Nun sollte man meinen, dass der Client dieses Repository einfach klonen könnte, doch weit gefehlt: Aus schier unerfindlichen Gründen muss er zunächst durch einige brennende Reifen springen.

Abbildung 2: Per Hand legt man Server-seitig ein leeres Repository namens »buy.git« an.

Wie Abbildung 3 zeigt, legt der Client dafür mit »git init« ebenfalls ein leeres Repository an. Zu Testzwecken packt er eine Datei »testfile« hinein, fügt sie erst mit »git add« ein und besiegelt dann den Vorgang mit einem »commit«. Der anschließend mit »remote add« definierte Remote-Branch zeigt unter dem Alias »origin« auf das zentrale Repository auf dem Server, das der Synchronisation verschiedener Clients dient.

Abbildung 3: Ein mit »git init« auf dem Client angelegtes leeres Repo erhält einen Remote-Branch, der auf das Server-Repo zeigt. Mittels »git push« füttert es dann das Remote-Repo mit den lokalen Änderungen.

Der Befehl »push origin master« synchronisiert dann den »master«-Branch des Clients mit dem gleichnamigen Branch des Servers. Bequem ist dabei, wenn der Server über den Public Key des Clients in der Datei »~/.ssh/authorized_keys« verfügt, sonst muss der Anwender bei jedem Zugriff übers Netz sein Passwort tippen. Möchte nun ein weiterer Client die Daten aus dem Server-Repository ziehen, klont er es lediglich (Abbildung 5). Einmal auf dem lokalen Rechner angekommen, ist es eine vollständige Kopie des Server-Repository samt der Möglichkeit, lokal eingecheckte Änderungen mit »git push« wieder zum Server hochzuspielen.

Abbildung 4: Weitere Clients können nun das Remote-Repository klonen und mit »git push« ihrerseits Änderungen auf der Server-Seite einspielen.

Abbildung 5: Das Kommando »git log« im Verzeichnis »~/data/shop« zeigt die letzten Transaktionen im lokalen Repository.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Perl-Snapshot

    Der Projekthoster Github beherbergt nicht nur die Code-Repositories vieler bekannter Open-Source-Projekte, sondern bietet auch ein durchdachtes API an, mit dem sich in ihnen herrlich herumschnüffeln lässt.

  • Umzugshelfer

    Der Webdienst Github erleichtert es Programmierern, einen Beitrag zu Open-Source-Projekten zu leisten, denn er vereinfacht und beschleunigt die Kommunikation zwischen Projekt-Maintainern und willigen Mitwirkenden radikal. Perl-Modulen ebnet ein Skript den Weg von CVS zu Git.

  • Stets zu Diensten

    Der Complete-Mechanismus der Shell vervollständigt angefangene Eingaben, sobald der User die Tabulator- taste drückt. Ein Perl-Skript erweitert die Funktion maßgeschneidert.

  • Überall Projekte

    Wie erhält der neu gekaufte Laptop schnellstmöglich Kopien aller aktiv genutzten Git-Repositories? Ein Meta-Repository führt eine Projektliste und Perl-Skripte automatisieren alle Aufspür- und Klonvorgänge.

  • Perl-Snapshot

    Github mit seiner einfach zu bedienende Weboberfläche lässt sich über seine Code-Archiv-Funktion hinaus für ganz und gar artfremde Dinge benutzen. Perlmeister Schilli zum Beispiel pflanzt mit Github ein Contentmanagement-System für einfache Webseiten in die Landschaft.

comments powered by Disqus

Ausgabe 06/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.