Neues Symfony Projekt mit CVS-Unterstützung erstellen

Unter Symfony 1.0 war die Erstellung eines neuen Projektes noch recht einfach. Pear-Paket installieren, Verzeichnis erstellen,  symfony init-project eintippen und schon war der Projektordner mit allem gefüllt was man brauchte. Bei mittlwerweile 3 Versionszweigen ist dies allerdings nicht mehr so einfach.

Wenn man Projekte aus verschiedenen Versionen pflegen muss, kann man mit der Pear-Installation nicht mehr arbeiten, da hier immer nur eine Version möglich ist. Ständiges deinstallieren und neu installieren finde ich auch keine gute Alternative. Ich habe mich dazu entschlossen, jedes Projekt fest mit seiner Symfony Library zu verknüpfen.

Der an vielen Stellen dafür vorgeschlagene optimale Platz dafür ist im lib/vendor Verzeichnis.

Bild 3

Nun stellt sich natürlich die Frage der Updates. Entweder lädt man jedes mal das neue Archiv herunter und tauscht es bei allen Projekten komplett aus oder man lässt Subversion die Arbeit für einen machen. Hierbei hat man zusätzlich noch den Vorteil das man Updates noch vor einem offiziellen Release bekommt.

Die nun folgende Anleitung zur Erstellung neuer Projekte bezieht sich auf Symfony 1.2 sowie Subversion und wurde auf meinem MacBook Pro durchgeführt. Es sollte so oder so ähnlich aber auch unter Linux funktionieren.

1.  Repository anlegen

Um das Leben einfacher zu machen setze ich zunächst 2 Umgebungsvariablen. $SVNREP_DIR  bezieht sich auf das Verzeichnis in dem das Repository erstellt werden soll. $PROJECT_NAME hat mehrere Funktionen. Zunächst mal ist es der Projektname unter Symfony. Gleichzeitig aber auch der Verzeichnisname für die Arbeitskopie (Working Copy) und der Name der MySql-Datenbank. Wer das anders habe möchte muss an den entsprechenden Stellen etwas aufpassen.

$ SVNREP_DIR=Users/freeze/svn/symfony_csv
$ PROJECT_NAME=symfony_csv
$ svnadmin create ~/svn/$PROJECT_NAME
$ svn mkdir -m „Standard csv structure“ file:///$SVNREP_DIR/trunk file:///$SVNREP_DIR/branches file:///$SVNREP_DIR/tags
$ svn mkdir -m „Create folder for Symfony“ file:///$SVNREP_DIR/trunk/lib file:///$SVNREP_DIR/trunk/lib/vendor~/svn/$PROJECT_NAME

2. Checkout

Nun wechselt man in das Verzeichnis in dem man seine Projekte verwaltet. Bei mir ist das im Userverzeichnis unter Sites.

cd ~/Sites
svn checkout file:///$SVNREP_DIR/trunk $PROJECT_NAME
cd $PROJECT_NAME

$ cd ~/Sites
$ svn checkout file:///$SVNREP_DIR/trunk $PROJECT_NAME
$ cd $PROJECT_NAME

3. Symfony vorbereiten

Symfony wird als externe Referenz in lib/vendor konfiguriert und danach installiert.

$ svn propset svn:externals „symfony http://svn.symfony-project.com/branches/1.2“ lib/vendor
$ svn commit -m „External link to Symfony“
$ svn update

Die aktuellste Version aus dem Branch von Symfony ist nun installiert und man kann mit der Initialisierung des Projektes weitermachen.

$ lib/vendor/symfony/data/bin/symfony generate:project $PROJECT_NAME

Damit das Projekt portabel bleibt sollte noch der Pfad innerhalb von config/ProjectConfiguration.class.php geändert werden:

$ require_once dirname(__FILE__).’/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php‘;

Ich lege noch einen symbolischen Link für das web/sf Verzeichnis an, da ich den Apache an dieser Stelle nicht konfigurieren möchte. Das ist aber sicher Geschmacksache.

$ ln -s ../lib/vendor/symfony/data/web/sf/ web/sf

Nun folgen Optimierungen für Subversion. Ins Repository gehören nur Dateien rein die veränderbar sind und nicht etwa automatisch generiert werden. Zu Letzteren gehören sicher die Daten in den Verzeichnissen cache und log, aber auch noch weitere aus lib wie zum Beispiel die Propel-Base Klassen. Die folgenden Einstellungen beziehen sich nur auf Propel.

$ rm -rf cache/*

rm -rf log/*
svn status | grep ^? | sed „s/? *//“ | xargs svn add
svn mkdir data/sql lib/model lib/model/om lib/model/map lib/filter lib/filter/base lib/form lib/form/base lib/task lib/widget
svn propset svn:ignore „*“ log
svn propset svn:ignore „*“ cache
svn propset svn:ignore „*schema-transformed.xml“ config
svn propset svn:ignore „lib.model.schema.sql
plugins.*.sql
sqldb.map“ data/sql

$ svn propset svn:ignore „*“ lib/model/om

$ svn propset svn:ignore „*“ lib/model/map

$ svn propset svn:ignore „*“ lib/filter/base

$ svn propset svn:ignore „*“ lib/form/base

$ svn commit -m „Project initialized“

4. Datenbank und Propel-Setup

Bei Bedarf kann man nun die Datenbank vorbereiten. Die Konfiguration von config/schema.yml habe ich hier ausgelassen.

$ ./symfony configure:database „mysql:host=localhost;dbname=$PROJECT_NAME“ user password
$ ./symfony propel:build-filters
$ ./symfony propel:build-forms

$ ./symfony propel:build-model
$ svn commit -m „Propel initialized“

5.  Applikation erstellen

Und zuletzt wird dann die eigentliche Applikation erstellt und noch mal alle neue Verzeichnisse dem Repository bekannt gemacht.

$ ./symfony generate:app –escaping-strategy=on –csrf-secret=Top$ecret frontend
$ svn status | grep ^? | sed „s/? *//“ | xargs svn add
$ svn commit -m „Generate app frontend“

Ergebnis

Am Ende hat man nun ein neues Symfony Projekt unter CVS-Kontrolle. Ein Update der Library kann man mittels svn update lib/vendor durchführen.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: