Search the FirstSpirit Knowledge Base
Hallo zusammen,
bei einem Kunden von uns gibt es gewisse Schwierigkeiten mit einer Vollpublizierung.
Diese leert im Vorfeld das Generierungs-Verzeichnis und führt einen Komplettabgleich durch(was seine Zeit braucht..).
Backendseitig kommt dabei .NET zum Einsatz.
Wenn eine .NET Webapplikation vom Browser mindestens einmal aufgerufen wurde, entsteht im IIS ein Filelock, welcher dann das Löschen von Dateien/Verzeichnissen verhindert und damit auch unseren Publizierungsauftrag.
Als Lösung könnte man, solange die Publizierung aktiv ist, eine App_offline.htm in die webroot einsetzen, welche die Applikation offline setzt und damit das Filelock-Problem auflöst.
Nun die eigentliche Frage:
Wir hätten gerne, dass man quasi den Publizierungsauftrag anstößt, dadurch das Verzeichnis geleert wird, danach die App_offline.htm in das root-Verzeichnis eingespielt wird und dann die eigentliche Publizierung vollzogen wird.
Lässt sich diese Reihenfolge überhaupt per Publizierungsaktionen/Skript einrichten?
Mit freundlichen Grüßen,
Michael
Hallo Michael,
ich würde folgendes vorschlagen:
- FirstSpirit veröffentlicht in ein temporäres Verzeichnis auf dem Zielserver
- Nachdem die Veröffentlichung erfolgreich durchgeführt wurde, wird auf dem FirstSpirit Server ein Skript ausgeführt, welches sich mit dem Live-Server verbindet und dort wiederum ein Skript ausführt, welches die Applikation offline setzt, dann das temporäre Verzeichnis in das Live-Verzeichnis umbenennt/transferiert und danach die Applikation wieder online setzt.
Risiko: Wenn das Skript auf dem Live-System in einen Fehler läuft, ist die Applikation offline. Hier muss also ein entsprechender Sicherheitsmechanismus benutzt werden, der dies nach Möglichkeit verhindert
Viele Grüsse aus Dortmund,
Holger
Danke erstmal für diesen Vorschlag, allerdings können wir so ein Risiko schlecht eingehen und auch der Aufwand dazu ist etwas zu hoch.
Uns wäre schon sehr geholfen, wenn man es irgendwie bewerkstelligen könnte, dass nach dem Leeren des Verzeichnisses sofort die App_offline.htm ins root-Verzeichnis gesetzt wird.
Wie ich das beobachten konnte, passiert nach dem Anstoß der Publizierung erstmal eine Weile nichts und anschließend wird alles von oben nach unten durchpubliziert und die App_offline.htm wird dabei leider erst gegen Ende angefasst.
Ursprünglich hatten wir die Idee, eine Datei namens App_online.htm im root zu lassen, diese dann nach beim Anstoßen der Publizierung in app_offline.htm umzubenennen. Durch den anschließenden Komplettabgleich wird diese aber wieder mitgelöscht.
Ich nehme mal an, dass es schwer wird hierfür eine Ausnahme einzufügen.
Kann man prinzipiell die Reihenfolge anpassen?
Gruß,
Michael
Sie könnte doch vor dem eigentlichem Publizierungsauftrag noch ein Skript einfügen welches die App_Offline.htm erzeugt und auf den LIVE-Server schiebt. Nach dem Publizierungsauftrag wird die Datei durch ein weiteres Skript einfach wieder entfernt.
Dieser Ansatz scheint auf den ersten Blick zu funktionieren.
Interessant wäre aber noch zu wissen, ob bei dem Komplett-Abgleich einer Vollpublizierung das Deployment-Verzeichnis(nicht Generierungsverzeichnis) vorher komplett gelöscht wird und anschließend wieder befüllt oder ob hier wirklich Stück für Stück eine Datei aus dem Generierungsverzeichnis mit der dazugehörigen Datei aus dem Deploymentverzeichnis abgeglichen und dann aktualisiert, bzw. gelöscht wird.
Ist Erstes der Fall, würde ja unsere App_Offline.htm für einen gewissen Zeitraum fehlen, was nicht sein darf.
Gruß,
Michael
Hallo Michael,
das kommt darauf an, wie veröffentlicht wird
Die meisten Veröffentlichungen (rsync, CRC Deployment {aus dem Security Modul}) gehen dateiweise vor. FTP- und Dateideployment müssten ordnerweise vorgehen {erst alle Dateien im Ordner löschen, dann Neuanlegen}. Kann aber auch sein, dass hier ebenfalls dateiweise vorgegangen wird.
Viele Grüsse aus Dortmund,
Holger
Beim Deployment wird der Verzeichnisbaum traversiert. In welcher Reihenfolge pro Verzeichnis dann gelöscht und angelegt wird ist nicht deterministisch.
Ob überhaupt gelöscht wird, wird im Deployment-Eintrag bestimmt ("Komplett-Abgleich" = mit Löschen, im Gegensatz zu "Abgleich ohne Löschen").
[Diese Aussagen beziehen sich nicht auf rsync]
Ok, mein Stand ist nun folgender:
1. Publizierungsauftrag wird gestartet
2. Ein Skript erstellt mir die App_offline.htm im root
3. Die Generierung wird angestoßen
4. Das Deployment startet
5. Ein weiteres Skript benennt die App_offline.htm in App_online.htm um.
So weit, so gut.
Schaue ich mir aber die Zeiten an, wann die Dateien das letzte Mal modifiziert wurden (im Dateisystem), fällt auf, dass Schritt 5. ein paar Sekunden vorher vollzogen wird, bevor das Deployment, also Schritt 4. vollständig abgeschlossen ist.
Ist hier FS einfach schneller als das Dateisystem, oder kann ich da noch eine Art Abfrage im Skript einbauen, welches wartet, bis Schritt 4. wirklich komplett abgeschlossen ist?
Edit: Dabei wird ein Komplett-Abgleich gemacht und es geht um ein gewöhnliches Dateideployment
Gruß,
Micha