Zope-Objekte in SVN

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Hi zusammen,

ich verwalte meine Zope-Objekte in SVN. Jedoch ist es mehr als aufwendig die Daten immer per Hand zu kopieren.. Gibt es eine gute Schnittstelle? Z.B. Maven? Auch ist es total dämlich geänderte Daten von der lokalen Zope-Instanz in die Instanz auf dem Produktivserver zu schieben. Z.B. stört mich gewaltig, dass ich immer zu aktualisierende Objekte vorher löschen muss, bevor ich die neue Version einspielen kann. Gibt's da ne elegantere Lösung?

Ich weiß, viele Fragen auf einmal. Aber vielleicht weiß jemand Rat.

Danke schon mal & Schönes WE

Dussel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

dusselmann hat geschrieben: ich verwalte meine Zope-Objekte in SVN. Jedoch ist es mehr als aufwendig die Daten immer per Hand zu kopieren.. Gibt es eine gute Schnittstelle? Z.B. Maven? Auch ist es total dämlich geänderte Daten von der lokalen Zope-Instanz in die Instanz auf dem Produktivserver zu schieben. Z.B. stört mich gewaltig, dass ich immer zu aktualisierende Objekte vorher löschen muss, bevor ich die neue Version einspielen kann. Gibt's da ne elegantere Lösung?
Hi Dussel!

Mein neuestes Plone-Produkt möchte ich auch mit SVN verwalten.

Mein Entwicklungs-Zope liegt auf meinem Linux-Server, da ich mit meiner Linux-Workstation sowie mit meiner Windows-Workstation und dem Laptop darauf zugreifen muss.

Dieser Umstand erleichtert die Sache sehr für mich, da ich die Mittel von Linux ohne Umwege über Cygwin verwenden kann.

Wahrscheinlich werde ich mir dafür ein kleines Shellskript schreiben:

- Einen temporären Ablageordner erstellen oder leeren.
- Mit `svn export` den Quellcode des Produkts in diesen Ordner exportieren.
- Mit `rsync` den Quellcode zum Produktionsserver übertragen. Mit den Flags `--delete` und `--delete-after` werden Dateien gelöscht, die nicht im temp. Ablageordner existieren. So werde ich die "*.pyc"-Dateien los.
- Temp. Ablageordner wieder löschen.

Müsste ich dieses Skript für Windows schreiben, dann würde ich auf `rsync` verzichten, da es unter Windows Probleme machen kann und stattdessen mit `psftp` aus dem Putty-Paket arbeiten. Das kann man auch recht gut mit einer Befehlsdatei (Batch) automatisieren.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Hi,

wenn dann möchte ich Maven oder Ant nutzen, um den Quellcode direkt aus Eclipse ins SVN zu packen.

Aber wie bekomme ich den Quellcode auf den Test-/Produktivserver ins Zope? Schließlich habe ich ja dann lauter Files und keine Objekte. Objekteigenschaften werden dann ja auch nicht übernomme/angelegt. Also bleibt nur das Exportieren aus der lokalen Instanz und der Import auf dem Server, richtig?

Aber wie kann man dann noch die lokalen Änderungen in Zope/Eclipse mit dem jeweils anderen gescheit Synchronisieren? Ich glaub das bekommt man genauso wenig hin...

Gruß, Dussel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

dusselmann hat geschrieben: Aber wie bekomme ich den Quellcode auf den Test-/Produktivserver ins Zope? Schließlich habe ich ja dann lauter Files und keine Objekte. Objekteigenschaften werden dann ja auch nicht übernomme/angelegt. Also bleibt nur das Exportieren aus der lokalen Instanz und der Import auf dem Server, richtig?
Hi Dussel!

Wie du bereits richtig bemerkt hast, ist Zope eine Objektdatenbank, die mit Objekten befüllt wird. SVN kann keine solchen Objekte verwalten -- nur Dateien.

Mit SVN lässt sich alles verwalten, was direkt im Dateisystem programmiert wird. Das können eigene Zope-Produkte oder Plone-/Archetypes-Produkte sein. Aber was du direkt im ZMI programmierst, kannst du nicht mit SVN verwalten.

Mit dem Produkt "ZSyncer" kannst du Zope-Ordner syncron halten.
http://www.dzug.org/dokumentation/produkte/zsyncer
http://zsyncer.sourceforge.net/

Es gibt, glaube ich, auch ein Produkt, mit dem die Zope-Daten nicht in der ZODB sonder im Dateisystem gespeichert werden -- ich weiß leider nicht mehr wie es heißt -- ist mir wahrscheinlich auch zu umständlich.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dieser Link könnte zu diesem Thema passen:
http://www.contentmanagementsoftware.info/zope/FSDump

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Hi Gerold,

hast du dein Script für SVN fertig? Könnte eine solche Lösung jetzt auch gut gebrauchen... :(

Gruß, Daniel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

dusselmann hat geschrieben: hast du dein Script für SVN fertig? Könnte eine solche Lösung jetzt auch gut gebrauchen...
Hi Daniel!

Ja, so ein Skript habe ich fertig. Es läuft aber unter Linux. Falls du es für Windows brauchst, müsstest du es sinngemäß umschreiben.

Ich habe den Hook und alles was noch so dazugehört gepackt und hochgeladen.

http://gerold.bcom.at/bilder/svn.tar.gz/download

Das Skript ist ziemlich simpel. Es löscht zuerst den Produkt-Ordner der Zielinstanz und befüllt diesen mit einem einfachen "svn export" wieder.

Danach muss man händisch die Zope-Instanz neu starten. Das wollte ich nicht automatisieren, da ich nicht einfach eine Produktiv-Instanz unkontrolliert neu starten wollte. Sollte das aber kein Problem sein, dann würde ich es unter Linux mit "/etc/init.d/zope-INSTANZNAME restart" und unter Windows mit "net stop SERVICENAME" und "net start SERVICENAME" machen.

Ein anderer Teil des Skriptes verschickt ein Email, wenn sich am Repository etwas verändert.

Unter Linux ist das komplette Löschen des Ordners kein Problem. Die Zope-Instanz funktioniert trotzdem noch. Unter Windows wird dieses Skript wahrscheinlich nicht funktionieren, ohne dass vorher die Zope-Instanz nieder gefahren wird. Windows sperrt die offenen Dateien und Linux löscht die Datei im Hintergrund erst dann, wenn diese nicht mehr verwendet wird.

Achtung: Der Benutzer der etwas mit "commit" eincheckt, muss das Recht haben, den Produktordner zu löschen, neu zu erstellen und zu befüllen.
Falls du mit Webdav arbeitest, muss der Benutzer mit dem der Apache ausgeführt wird, dieses Recht haben.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten