"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Einrichten Multi-Developer/Redakteur/Versionierung Umgebung

Rektal 10.03.2005 - 16:58 683 6
Posts

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Ich bin auf der Suche nach allerlei Infos zur Einrichtung fuer gute Entwicklungsumgebung fuer Webdevelopment-Bereich.

Grob meine ich damit Developing, Staging, Live-Systeme, Sourcecode Versionierung, was einem nicht noch alles einfaellt.

Server-Systeme sind Linux, Client-System WXPPro.

Idealerweise wird der Source-Code lokal ausgecheckt und wenns funktioniert wieder eingecheckt. Knackpunkt Webdevelopment: jeder braucht eine lokale Webserver-Instanz, zur Not auch eine Datenbank. Dann wirds schon wieder komplexer. Da an mehreren Projekten gearbeitet wird, muessen lokal also mehrere VirtualHosts funktionieren. Noch ein eck komplexer. Jeder Entwicklung muss sich einmal alles einrichten beim ersten mal. Man koennte sagen, einmal die Konfigurationen machen und auf allen Entwickler-Rechnern einspielen. Aber trotzdem eine zache Sache, wenn sich was aendert.

Dann gibts noch das auschecken des Source-Codes auf den Entwicklungsrechner direkt, wo jeder jeden Code aendern kann und auch einchecken kann. Server- und Datenbankinstanz sind das Developmentsystem, d.h. keine per-Entwickler konfiguration notwendig. Nachteil: zwei Leute am selben File arbeiten geht nicht, man muss sich absprechen. Hier gehe ich davon aus, dass bei lokalem checkout eines Entwicklers das Versionierungssystem ein intellligentes Merge besitzt bzw. bei Konflikten den Entwickler notified.

Bei dem ganzen gibts jetzt aber noch kein Staging-System. Ich sehe das Staging-System zwischen Developing und Live-System. Andererseits denke ich mir, ich mache das Development-System automatisch zum Staging-System, wenn die Entwickler alle direkt auf einer File-Ebene arbeiten. Denn wenn jeder lokal Arbeitet, hat jeder ein lokales Entwicklungssystem, prueft seine Aenderungn auf funktionalitaet vor dem einchecken und beim einchecken werden die Aenderungen aufs Staging-System uebernommen.

Dann habe ich noch die Gruppe von Leuten, die keine Entwickler sondern Redakteuere sind. Historisch gewachsen muessen diese aber direkt Zugriff auf zumindest HMTL-Sourcen haben. HTML- und PHP ist im Datiesystem wild gemischt, eine klare Trennung nicht moeglich. Ein Redakteur hat andere Kenntnisse als ein Entwickler. Einem Redakteur kann man nicht mit einem File-basiertem Versionierungssystem konfrontieren. Auf welchem System sollen Redakteuere dann arbeiten? Ein eigenes Entwicklungssystem, auf dem alle Redakteure arbeiten? Wenn Redakteuere ihre Aenderungen aufs Live-System publizieren wollen, geht das zuerst in Staging-System zur ueberpruefung und dann erst aufs Live-System? Aber auch das wie ist nicht unwichtig. FTP-bedienen bekommen Redakteuere hin. Aber FTP wohin? Aufs Staging-System? Muesste ja auf eine Zwischenstation, damit es auch (automatisch?) eingecheckt wird.

Uiui .. und so verfaengt man sich leicht. Jemand gute Praxiserfahrungen?

In der Praxis haben alle Entwickler immer ueber ein Netzwerklaufwerk entwickelt, das war Development-System und nicht sehr aufwendig zu warten. Nur wenns mehr Entwickler werden? Ein commit auf solch einen Development-system wuerde eine automatische aktualisierung am Staging-System mit sich bringen. Dann ist nur die Frage, wie es von dort ins Live-System kommt. Muesst man eigens Routinen entwicklen o.ae. ...

Ist jetzt aber lang geworden :)
Bearbeitet von Rektal am 10.03.2005, 16:58 (Titel aussagekraeftiger gemacht)

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
witzig dass du fragst da du vermutlich der jenige hier bist der hier am meisten erfahrung hat - btw hab ich dich genau das vor ziemlich genau 6 monaten gefragt ;)


kurz ein paar anmerkungen:
redakteuren kann man ein versioning system "erklaeren"
installier ihnen doch tortoiseSvn - wie du weisst simpler als jeder ftp client - verstehen sie 100%ig - ob sie direkt ins produktivsystem commiten duerfen kann ich nur schwer beurteilen ;)


zum rest:
knackpunkt ist hier nicht nur die webserver in der development umgebung - vorallem die datenbanken machen hier probleme

grundsaetzlich bin ich der meinung das saemtlicher sourcecode (inkl db) nur an einer stelle sein sollte - sprich am server
fuer jeden developer ein netzwerklaufwerk einrichten mit automatischen eingerichteten vhost (mod_rewrite machts moeglichst sexy - sogar verschiedene apache instanzen/php versionen nur durch die host ("subdomain") information auslesbar -> rewrite) ist ansich kein problem - jedoch wo mit der datenbank ansetzen - pro devcoder eine eigene db? saemtliche alter's commands ebenfalls einchecken ? - koennte man alt werden

ich wuerd nicht automatisch den dev branch zum produktiv system exportieren - eher regelmaessig tags kopieren und die automatisch einspielen lassen

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Zitat
pro devcoder eine eigene db? saemtliche alter's commands ebenfalls einchecken ? - koennte man alt werden
ein phpmyadmin hack wäre sexy, der automatisch in eine datenbank "eincheckt" (für alle) und dadurch tablestruktur und eventuell auch datenveränderungen festhält und diese per wunsch in ein sql file exportiert. würde imo zumindestens einen teil der dbsync erleichtern - nur so eine idee :)

praxis ist bei uns in der firma nur fileversionierung, die dbs sind lokal ergo retail version muss händisch zusammengebastelt werden. steinzeit halt, allerdings lohnt sich bei uns der aufwand für eine automatisiertere lösung nicht.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Zitat von mat
Zitat von zankarne
ich hab das spiel jetzt 1 monat und weil mir mein rechner daheim eingangen is und ich immer noch kein internet habe ich supertolle 13h bis jetzt spielen können :\
Das verstehe ich nicht ganz. In welche Richtung (Dev - Stage - Live) soll das funktionieren, mit welchem Ziel?

Zitat
praxis ist bei uns in der firma nur fileversionierung, die dbs sind lokal ergo retail version muss händisch zusammengebastelt werden. steinzeit halt, allerdings lohnt sich bei uns der aufwand für eine automatisiertere lösung nicht.
DB-Versionierung (also Inhalt der DB) kann ich mir auch nur schwer vorstellen. Das beste was ich gefunden habe, ist mittels DBDesigner (leider auslaufendes Produkt :-/ ) die XML-Schemas in die File-Versionierung schmeissen.

funka

Legend
ex-prophet(down below)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
mat meint das ca so:

das interface zur dbms speichert in einem unabhaengigen file saemtliche table veraenderungen/erstellungen (am besten auch testdaten)
dieses extra file kann mit-commited werden (am besten das file ebenfalls innerhalb des rep. anlegen)
fuer den final-tag wird ein script von einem table export verwendet

nachteil: man muss halt jedem developer eine eigene db anlegen - waer ansich nicht so schlimm - erhoeht aber dennoch den aufwand unverhaeltnissmaessig imho

der vermutlich beste weg ist immer noch das datenbankmodell moeglichst frueh auszureifen und dann nur noch in ausnahmefaellen zu veraendern - aber siehe realitaet -> naja...

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Zitat
witzig dass du fragst da du vermutlich der jenige hier bist der hier am meisten erfahrung hat - btw hab ich dich genau das vor ziemlich genau 6 monaten gefragt ;)
Ja, ich weiss ;) Nur frag ich mich ob ich mein eigenes Paradigm fuer dieses Szenario (vor allem wegen der Redakeure) noch anwenden kann.


Zitat
redakteuren kann man ein versioning system "erklaeren"
installier ihnen doch tortoiseSvn - wie du weisst simpler als jeder ftp client - verstehen sie 100%ig - ob sie direkt ins produktivsystem commiten duerfen kann ich nur schwer beurteilen ;)
Wie, du gehst davon aus, dass Redakteuere FTP verstehen? Und ich weiss net, ob Toirtoise einfacher ist. SVN Url eingeben, und nicht die falsche erwischen .. da kann einiges schief gehen.

Es gibt derzeit ein brauchbares System, in dem sie eine Seite HTML modifizieren, anschauen im Browser auf dem Dev/Stage-System. Wenn Ok ist fuer Upload, wird ein Bookmarklet im Browser (JS & co) aufgerufen, dass ein PHP-Script aufruft, dass die URL rausfindet, somit die upzuloadende Datei, aufgrund dessen die Inkludierten Images und fragt auch, welche Images upgeloadet werde muessen ... doing, fertig. Nix FTP.

Zitat
knackpunkt ist hier nicht nur die webserver in der development umgebung - vorallem die datenbanken machen hier probleme
Indeed.

Zitat
grundsaetzlich bin ich der meinung das saemtlicher sourcecode (inkl db) nur an einer stelle sein sollte - sprich am server
fuer jeden developer ein netzwerklaufwerk einrichten mit automatischen eingerichteten vhost (mod_rewrite machts moeglichst sexy - sogar verschiedene apache instanzen/php versionen nur durch die host ("subdomain") information auslesbar -> rewrite) ist ansich kein problem
Hmm .. klingt gut, kannst du das im Detail erlaeutern wie das gehen sollte?

Zitat
ich wuerd nicht automatisch den dev branch zum produktiv system exportieren - eher regelmaessig tags kopieren und die automatisch einspielen lassen
Tag ist gut, ja. Ich dachte eher auch den DEV auf Stage automatisch. Aber ueberall wo automatisierung, da auch Problem.

Vor allem wenn du per Hand in ein uebergeordnetes System eingreifen musst, fuer temporaere Hacks usw, wirds unschoen.

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Update wird noetig. Folgender Schlachtplan wurde erstellt:


Es gibt Entwickler und Redakteuere.
Es gibt Apache Development, Stage und Live.
Es gibt MySQL Development und Live.


Entwickler machen keine lokalen checkouts sondern arbeiten alle gemeinsam auf einem Share, das quasi einen 'Megacheckout' von allen Projekten darstellt. Dieses Share wird ueber Samba zur Verfuegung gestellt und ist einer starren Struktur fuer die Porjektverzeichnisse ausgeliefert, da Apache diese Verzeichnisse braucht.

Entwickler commited die Daten und sind somit im Versionierungsststem. Entwickler muessen die Daten manuell auf das Stage System spielen, dies wird nicht automatisch gemacht. Das Stage-System ist Firmenintern, d.h. es ist nur ein weiteren Share, wo die entsprechenden Dateien einfach nur hinkopiert werden muessen.

Das Stage-System ist besondern konfiguriert, so dass jedes Projekt unter zwei verschiedenen URLs angesprochen werden kann. Mit url1 ist das Projekt so konfiguriert, dass es den MySQL Dev verwendet, mit URL greift es auf Mysql Live nur lesend zu.

Es gibt ein eigenes Web-Interface fuer Entwickler dass Daten von Stage auf Live publiziert. Technik dahinter nicht fixiert, ev. rsync o.ae.

Entwickler haben somit keinen direkten Zugriff auf Live-System. Existiert fuer Ausnahmefaelle, ist aber nicht die Regel.

Syncs via Web-Interface werden authentifiziert und protokolliert.


Redakteuere arbeiten direkt auf dem Share. Redakteuere haben aber ein eigenes Share, das ein Teil des bestehenden Entwickler-Shares ist.

Redakteuere haben ein eigenes Web-Interface, dass die Daten im Hintergrund in das Versionierungssystem commited. Das Versionierungssystem veroeffentlicht diese commits dann automatisch auf das Staging und Live-System. Hier sollte das Live-System zwar eigentlich nicht drin sein, aber es geht praktikabel nicht anders. Redaktuere zweimal etwas commiten/syncen muessen ist nicht drin.

Further comments?

Demnaechst kann ich auch ein Diagramm zur Veranschaulichung reinstellen. Btw, falls jemand gute Tipps hat (OpenSource), her damit. Hab dia verwendet, aber ich kann nicht alle Objekte auf einmal skalieren (wtf?) und ich hab net von Anfang an drauf geachtet und jetzt wird das immer ueber 10 A4 Seiten ausgedruckt :) Sodipodi muss ich noch testen, Inscape ist beim ersten Versuch gleich abgeschmiert. Herrgott, immer diese Unix-win32 Ports ;)
Bearbeitet von Rektal am 08.04.2005, 12:14 (Uebersicht raufgeladen)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz