In vielen Organisationen werden separate Entwicklungs-, Staging- und Produktionsumgebungen verwendet, um die Qualität der Websites zu erhalten. So sehen die Umgebungen aus, wenn ArcGIS for Server involviert ist:
- Entwicklung: Dies ist eine Sandbox-ArcGIS for Server-Site, auf der Sie Ihre Anwendungen und Services frei testen können. In der Regel wird die Entwicklungs-Site auf einem kleinen Computer mit einer Esri Developer Network-(EDN-)Lizenz für ArcGIS for Server ausgeführt. Sobald die Änderungen auf der Entwicklungs-Site überprüft wurden, werden sie auf die Staging-Site angewendet.
- Staging: Bei dieser ArcGIS for Server-Site handelt es sich um einen Klon der Produktions-Site. Bei Tests auf dieser Ebene müssen Sie entscheiden, ob sie die Änderungen auf die Produktions-Site anwenden oder sie verwerfen und auf eine neue Iteration von der Entwicklungs-Site warten möchten. Die Staging-Site wird nicht für Entwicklungszwecke, sondern nur für Tests der Performance und Funktionalität verwendet. Esri bietet Benutzern von ArcGIS for Server Staging-Lizenzen zu geringeren Kosten als Produktionslizenzen.
- Produktion – Dies ist die Site, auf der geschäftliche Workflows tatsächlich unterstützt werden, die Site, auf die echte Benutzer zugreifen. Auf dieser Site finden keinerlei Entwicklungen oder Tests statt. Es werden nur Änderungen, die auf der Staging-Site mithilfe von Tests überprüft wurden, auf die Produktions-Site angewendet.
Die Entwicklungs-, Staging- und Produktionsumgebungen verwenden idealerweise unterschiedliche Datenbanken und Infrastrukturen. Jede Organisation hat ihre eigenen Regeln für Tests und Genehmigungen von Änderungen auf den Sites.
Das Verschieben einer Änderung von einer Site auf die andere kann eine logistische Herausforderung darstellen. Dieses Hilfethema enthält Muster und Skripte, um Sie durch den Prozess zu leiten.
Konfigurieren der einzelnen Umgebungen
Installieren Sie in jeder Umgebung ArcGIS for Server, erstellen Sie eine Site, und konfigurieren Sie Sicherheitseinstellungen, Serverobjekterweiterungen (SOEs) und weitere Einstellungen. Die meisten dieser Aufgaben lassen sich schneller manuell durchführen, Sie können jedoch auch ein Skript wie Beispiel: Benutzer und Rollen aus zwei Textdateien erstellen.
Zuerst muss Ihre Entwicklungs-Site funktionieren. Erstellen Sie anschließend die Staging-Site, gefolgt von der Produktions-Site.
Bereitstellen von Services
Der Schlüssel zur Bereitstellung von Services in mehreren Umgebungen liegt in der korrekten Registrierung der Ordner und Datenbanken bei ArcGIS for Server und der Nutzung von Service-Definitionen (SDs) für die Veröffentlichung.
Registrieren der Ordner und Datenbanken bei ArcGIS for Server
Wenn Sie einen Ordner oder eine Datenbank bei ArcGIS for Server registrieren, geben Sie den Pfad des Publishers zu den Daten und den Pfad des Servers an.
- Beim Pfad des Publishers handelt es sich um den Datenpfad auf dem Computer, den Sie zur Erstellung der SD-Dateien verwenden. Der Pfad des Publishers ist bei der Registrierung eines Elements auf den Entwicklungs-, Staging- und Produktionsservern immer der gleiche.
- Beim Pfad des Servers handelt es sich um den Datenpfad auf dem Server. Dieser Pfad kann bei der Registrierung eines Elements auf den Entwicklungs-, Staging- und Produktionsservern variieren.
Wenn Sie viele Datenordner oder Datenbanken registrieren müssen, empfiehlt sich möglicherweise die Verwendung von Skripten. Beispiel: In einer Textdatei aufgelistete Ordner und Datenbanken registrieren nutzt die ArcPy AddDataStoreItem-Funktion, um eine Liste an Ordnern und Datenbankverbindungen aus einer Textdatei zu registrieren. Die Textdatei wird für jede Umgebung entsprechend geändert.
Veröffentlichen von Services
Verwenden Sie SD-Dateien, wenn Sie die Services in mehreren Umgebungen bereitstellen. Die SD veröffentlicht einen Service mithilfe der erforderlichen Informationen und packt diesen in eine gezippte Datei. Auch wenn es möglich ist, die GIS-Daten innerhalb der SD zu komprimieren, es ist wahrscheinlich einfacher, die Daten in die jeweilige Umgebung zu laden und sie mithilfe der Replikation zu synchronisieren.
Erstellen Sie verbindungsneutrale SD-Dateien (wählen Sie im Assistenten Service-Definition speichern die Option Keine verfügbare Verbindung), damit diese flexibel genug sind, um einen beliebigen Server veröffentlicht werden zu können. Wenn Sie eine SD-Datei veröffentlichen, korrigiert ArcGIS for Server automatisch den in die SD geschriebenen Pfad, sodass der Pfad des Servers verwendet wird. Eine umsichtige Datenregistrierung ermöglicht es Ihnen, die gleiche SD-Datei in mehreren Umgebungen bereitzustellen.
Das Veröffentlichen von Services eignet sich gut zur Skripterstellung. Beispiel: In einer Textdatei aufgeführte Service-Definitionen veröffentlichen liest eine Textdatei und veröffentlicht alle aufgeführten SDs. Zur Veröffentlichung der jeweiligen SD verwendet das Skript die ArcPy-Funktion Service-Definition hochladen.
Nachdem die Services von den SDs bereitgestellt wurden, aktivieren Sie sämtliche von den Services vorausgesetzten Erweiterungen. Sie können dies manuell oder durch Skripterstellung durchführen.
Das Anwenden von Berechtigungen ist eine weitere Aufgabe, die mit einem Skript verwendet werden kann. Beispiel: Berechtigungen aus einer Textdatei anwenden verwendet die ArcGIS-REST-API, um Berechtigungen auf verschiedene, in einer Textdatei aufgeführte Services anzuwenden.
Aktualisieren von Services
In manchen Fällen müssen Sie einen Service aktualisieren, um neue Eigenschaften zu verwenden oder Änderungen im Quelldokument wiederzugeben, wie ein Satz an permanenten Symbologiebearbeitungen in einem ArcMap-Dokument (MXD). Es wird empfohlen, zur Aktualisierung eines Services in mehreren Umgebungen eine neue SD-Datei zu speichern, den Service zu löschen und dann die aktualisierte SD zu veröffentlichen.
Wenn Sie diesen Ansatz wählen, kann das gleiche Beispielskript, das oben für die Veröffentlichung verwendet wurde, auch Serviceaktualisierungen durchführen. Ändern Sie einfach die Eingabedatei so, dass nur die Service eingeschlossen werden, die Sie aktualisieren möchten. Wenn ein vorhandener Service gefunden wird, wird dieser vor dem Hochladen der SD vom Skript gelöscht.
Nachdem Sie einen Service auf diese Art aktualisiert haben, aktivieren Sie sämtliche, vom Service verwendeten SOEs erneut.
Alternativ können Sie mithilfe der Operation Service bearbeiten in der ArcGIS-REST-API die Aktualisierungen in die Serviceeigenschaften schreiben (jedoch nicht in die Karte oder das Quelldokument).
Synchronisieren von Daten
Stellen Sie sicher, dass Ihre Daten in den verschiedenen Umgebungen synchronisiert sind. Dabei kann Ihnen eine Geodatabase-Replikation behilflich sein. Alternativ können Sie auch das alte Dataset durch ein neues ersetzen. Sie können beispielsweise eine File-Geodatabase löschen und diese durch eine aktualisierte File-Geodatabase ersetzen.
Wenn Sie Tabellen oder File-Geodatabase vollständig ersetzen möchten, beachten Sie, dass die ArcGIS for Server-Services die zu Grunde liegenden Schemas der Datasets standardmäßig sperren. Wenn das Schema gesperrt ist, halten Sie den Service an, bevor die Daten ersetzt werden können. Wenn Sie mit Bedacht vorgehen, können Sie die Schemasperrung für Karten-Services deaktivieren, für andere Service-Typen ist dies jedoch nicht möglich.
Aktualisieren von Anwendungen
Wenn Sie eine Anwendung zwischen den Entwicklungs-, Staging- und Produktionsumgebungen verschieben möchten, kopieren Sie die Anwendungsdateien von einer Site auf die andere, und aktualisieren Sie sämtliche Web-Service-URLs in Ihrem Code, sodass diese auf die neue Site verweisen. Verwenden Sie Konfigurationsdateien, um die URLs für Ihre Services zu definieren.
Das folgende Skript hilft Ihnen, die URLs in Ihrem Code zu aktualisieren. Der Code sucht rekursiv nach Dateien in einem von Ihnen bereitgestellten Ordner sowie nach einer bestimmten Zeichenfolge, wie http://myDevServer/arcgis, und ersetzt diese durch den Speicherort Ihrer Staging- oder Produktions-Site, wie http://myProdServer/arcgis.
Bevor Sie dieses Skript starten, sollten Sie eine Sicherungskopie der ursprünglichen Anwendungsdateien erstellen. Beachten Sie außerdem, dass Sie mit dem Skript die Erweiterung der Textdateien, die Sie verarbeiten möchten, festlegen können, z. B. .js und .html für Ihre ArcGIS API for JavaScript-Dateien.
Nachdem Sie die URLs mithilfe des Skripts ersetzt haben, kopieren Sie die Anwendungsdateien auf den nächsten Server im Workflow (Staging oder Produktion).
import os
import sys
import shutil
import traceback
def dirEntries(dir_name, subdir, *args):
'''Return a list of file names found in directory 'dir_name'
If 'subdir' is True, recursively access subdirectories under 'dir_name'.
Additional arguments, if any, are file extensions to match filenames. Matched
file names are added to the list.
If there are no additional arguments, all files found in the directory are
added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', False, 'txt', 'py')
Only files with 'txt' and 'py' extensions will be added to the list.
Example usage: fileList = dirEntries(r'H:\TEMP', True)
All files and all the files in subdirectories under H:\TEMP will be added
to the list.
'''
fileList = []
for file in os.listdir(dir_name):
dirfile = os.path.join(dir_name, file)
if os.path.isfile(dirfile):
if not args:
fileList.append(dirfile)
else:
if os.path.splitext(dirfile)[1][1:] in args:
fileList.append(dirfile)
# recursively access file names in subdirectories
elif os.path.isdir(dirfile) and subdir:
print "Accessing directory:", dirfile
fileList.extend(dirEntries(dirfile, subdir, *args))
return fileList
def updateString(infileName, srchString,rplString):
bakFileName = os.path.splitext(infileName)[0] + ".bak"
if not os.path.exists(bakFileName):
# copy the original file
shutil.copy(infileName, bakFileName)
# Open the backup (= original) file to read
inFileHndl = open(bakFileName,"r")
outFileHndl = open(infileName,"w")
for line in inFileHndl:
if line.find(searchString) > 0:
line = line.replace(searchString, replaceString)
outFileHndl.write(line)
outFileHndl.close()
inFileHndl.close()
# remove the backup (=original content file)
os.remove(bakFileName)
if __name__ == '__main__':
try:
inFolder = r"C:\inetpub\wwwroot\viewer" # path to search
searchString = "http://mydevserver" # string to find
replaceString = "http://mystgserver" # string - replace searchString with replaceString
fList = dirEntries(inFolder, True, 'xml')
for f in fList:
updateString(f, searchString, replaceString)
print '\n\n\n' + 'Process Complete'
except:
# Return any python specific errors as well as any errors from the geoprocessor
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n " + \
str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
print '\n\n\n' + pymsg