Skip To Content

ArcGIS for Server in Entwicklungs-, Staging- und Produktionsumgebungen

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.

SD-Dateien werden mithilfe eines Skripts in den verschiedenen Umgebungen bereitgestellt.

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