2009-10-02 2 views
6

Dies ist hauptsächlich eine Frage zu PHP. Ich frage mich: Wie stellen Sie sicher, dass alle erforderlichen Bibliotheken mit Ihrer Anwendung verpackt sind, wenn Sie eine Bereitstellung auf (Produktions-) Servern durchführen?Wie behandeln Sie Bibliotheksabhängigkeiten während der Bereitstellung mit PHP?

Ein konkreteres Beispiel: Ich habe eine App, die auf Zend Framework läuft und jedes Mal, wenn ich die Anwendung auf einen Server rolle, erstellt der Deployment-Prozess eine neue "Installation" auf diesem System. Daher muss ich das Zend Framework zusammen mit meiner Anwendung bündeln und dann die Dateien an den richtigen Stellen zusammen kopieren (es wird automatisch gemacht). Zurzeit verwende ich eine svn: externals-Definition, um die Dateien während der Bereitstellung aus dem SVN-System von Zend zu holen, aber ich möchte mich nicht auf diesen SVN verlassen, und ich möchte auch nicht mit jeder Bereitstellung Traffic auf externe SVNs legen .

In der Java-Welt bin ich an Maven gewöhnt, der solche Sachen mit zentralen Artefakt-Reposituren behandelt. Ich weiß, dass es eine Maven4PHP-Version gibt, allerdings suche ich eher nach einer PHP-basierten Lösung. Außerdem glaube ich nicht, dass PEAR ein guter Weg ist, da es nicht wirklich meine Anforderung erfüllt, die Anwendung (inkl. Libs) in einem einzigen Deployable zu bündeln.

Gibt es bereits ein Tool, das mir nicht bekannt ist? Oder hast du eine großartige Technik, die ich kennen sollte?

Vielen Dank für Ihre Hilfe!

Michael

Antwort

3

Es ist ein Build-System Phing genannt, die in PHP geschrieben und basiert auf Apache Ant.

Ich persönlich kann sehr gut mit externen leben.

+1

Ja, ich weiß, Phing! Gibt es eine Out-of-the-Box-Aufgabe, um Abhängigkeiten aufzulösen? Oder geht es darum, meine eigene Aufgabe zu schreiben? Vielen Dank! –

+0

@Michael Ich handle Abhängigkeiten mit Phing mit einem einfacheren Ansatz. Es ist vielleicht nicht so robust wie eine Abhängigkeitsaufgabe wahrscheinlich sein sollte, aber ich habe eine Reihe von phing-Helfern, die einfache Build-Skripte sind, die für die Import-Aufgabe entworfen wurden. In meinem Projekt-Helfer definiert sie eine resolve-deps-Aufgabe, die eine foreach ist Das führt eine Phing-Aufgabe zu einem externen Erstellungsskript mit Eigenschaften, die die Abhängigkeit definieren, aus. –

0

Es ist noch nicht produktionsbereit, aber Sie sollten das Projekt Phark im Auge behalten. Es ist ein Port von Bundler zu PHP.

Während ich durch die Simplify your external dependency management Folien schaute, stieß ich auf ein Werkzeug namens pantr, das als ein PEAR-Installer verwendet werden kann. pantr as PEAR installer, mit dem Sie Ihre Abhängigkeiten in einer projektspezifischen Datei angeben können.

Der Artikel Version Control != Dependency Management hat einige Informationen über das neue PEAR Installer Pyrus

3

Ich denke, die vendor branching das Problem aus Ihrem Beispiel ganz einfach lösen würde, aber wenn Sie auch ich empfohlen genannt verwendet hatte keine großen Repositories wie auf dem modernen Spielzeug zu beobachten wie composer und what it solve (und vielleicht phark, hörte ich noch nie zuvor :))

+0

+1 für die Erwähnung des Komponisten, das ist eine alte Frage, die ich glaube, aber die absolute Mehrheit der PHP-Projekte verwenden Composer für das Abhängigkeitsmanagement. –