ArcGIS Server dans des environnements de développement, intermédiaires et de production

De nombreuses organisations utilisent des environnements distincts de développement, intermédiaires et de production pour assurer la qualité de leurs sites Web. Voici à quoi ressemblent les environnements lorsqu'ArcGIS Server est utilisé :

Les environnements de développement, intermédiaire et de production utilisent habituellement des bases de données et une infrastructure différentes. Chaque organisation possède ses propres règles sur la méthode de test et d'approbation des modifications sur les sites.

Le transfert d'une modification d'un site à un autre peut présenter des défis de nature logistique. Cette rubrique d'aide propose des modèles et des scripts pour vous guider tout au long du processus.

Configuration de chaque environnement

Dans chaque environnement, vous devez installer ArcGIS Server, créer un site, configurer la sécurité, les extensions d'objets serveur (SOE) et d'autres paramètres. La plupart de ces tâches sont exécutées plus rapidement manuellement, bien que vous puissiez utiliser un script comme le suivant : Exemple : créer des utilisateurs et des rôles à partir de deux fichiers texte.

Activez tout d'abord votre site de développement. Créez ensuite le site intermédiaire, puis le site de production.

Déploiement de services

Pour déployer des services dans plusieurs environnements, vous devez correctement inscrire vos dossiers et bases de données auprès d'ArcGIS Server et utiliser des définitions de services (SD) pour la publication.

Inscription de dossiers et de bases de données auprès d'ArcGIS Server

Lorsque vous inscrivez un dossier ou une base de données auprès d'ArcGIS Server, vous indiquez le chemin d'accès au dossier de l'éditeur qui contient les données et le chemin d'accès aux données sur le serveur.

  • Le chemin d'accès au dossier de l'éditeur est le chemin d'accès aux données sur la machine que vous utiliserez pour créer les fichiers SD. Le chemin d'accès au dossier de l'éditeur est toujours identique lorsque vous inscrivez un élément auprès des serveurs de développement, intermédiaires et de production.
  • Le chemin d'accès au serveur est le chemin d'accès aux données sur le serveur. Ce chemin d'accès peut varier lorsque vous inscrivez un élément auprès des serveurs de développement, intermédiaires et de production.

Si vous devez inscrire plusieurs dossiers de données ou bases de données, envisagez l'utilisation de scripts. Exemple : enregistrer des dossiers et des bases de données répertoriés dans un fichier texte utilise la fonction ArcPy AddDataStoreItem pour inscrire une liste de connexions à des dossiers et bases de données figurant dans un fichier texte. Vous devez modifier le fichier texte pour chaque environnement.

Publication de services

Utilisez des fichiers SD lorsque vous déployez vos services dans plusieurs environnements. La définition de service extrait les informations nécessaires à la publication d'un service et les empaquette dans un fichier pratique. Bien qu'il soit possible d'empaqueter les données SIG dans la définition de service, vous remarquerez qu'il est plus facile de précharger les données dans chaque environnement et d'utiliser la fonction de réplication pour en assurer la synchronisation.

Créez des fichiers de définition de service non dépendants d'une connexion (en choisissant l'option Aucune connexion disponible dans l'assistant Enregistrer une définition de service) pour qu'ils soient suffisamment flexibles pour être publiés sur un serveur quelconque. Lorsque vous publiez un fichier SD, ArcGIS Server corrige automatiquement les chemins consignés dans la définition de service pour que les chemins d'accès à votre serveur soient utilisés. Ainsi, en inscrivant correctement vos données, vous pouvez déployer le même fichier SD dans plusieurs environnements.

La publication de services est une tâche très adaptée aux scripts. Exemple : publier des définitions de services répertoriées dans un fichier texte permet de lire un fichier texte et de publier toutes les définitions de service répertoriées. Le script utilise la fonction ArcPy Charger une définition de service pour publier chaque définition de service.

Les fichiers SD sont déployés dans les divers environnements à l'aide d'un script.

Après avoir déployé vos services à partir de la définition de service, vous devez activer les SOE requises par les services. Vous pouvez effectuer cette opération manuellement ou via des scripts.

L'application d'autorisations représente une autre tâche que vous pouvez exécuter via des scripts. Exemple : appliquer des autorisations à partir d'un fichier texte permet d'utiliser l'API REST d'ArcGIS pour appliquer des autorisations aux divers services répertoriés dans un fichier texte.

Mise à jour des services

Vous souhaiterez parfois mettre à jour un service pour utiliser de nouvelles propriétés ou refléter des modifications apportées au document source, telles qu'une série de modifications permanentes appliquées à la symbologie dans un document ArcMap (MXD). Nous vous recommandons de mettre à jour un service dans plusieurs environnements en enregistrant un nouveau fichier SD, en supprimant le service et en publiant la définition de service à jour.

En procédant ainsi, le même exemple de script que celui utilisé précédemment pour la publication peut également servir à mettre à jour les services. Il vous suffit de modifier le fichier en entrée pour n'inclure que les services à mettre à jour. En présence d'un service, le script le supprime avant de télécharger la définition de service.

Après avoir mis à jour un service de cette façon, vous devez réactiver les SOE qu'il utilise.

Vous pouvez également mettre à jour, via des scripts, les propriétés de services (mais pas la carte, ni le document source) via l'opération Modifier le service dans l'API REST d'ArcGIS.

Synchronisation régulière des données

Vous devez vous assurer que vos données restent synchronisées dans plusieurs environnements. A cette fin, vous pouvez faire appel à la réplication de géodatabases. Vous pouvez également remplacer entièrement l'ancien jeu de données par le nouveau. Par exemple, vous pouvez supprimer une géodatabase fichier et la remplacer par une géodatabase fichier à jour.

Si vous décidez de remplacer entièrement des tables ou géodatabases fichier, n'oubliez pas que les services ArcGIS Server verrouillent par défaut les schémas des jeux de données sous-jacents. Si le schéma est verrouillé, vous devez arrêter le service avant de pouvoir remplacer les données. En procédant avec précaution, vous pouvez désactiver le verrouillage du schéma pour les services de cartes, mais pas pour d'autres types de services.

Mise à jour d'applications

Pour transférer une application entre les environnements de développement, intermédiaires et de production, vous pouvez copier les fichiers d'applications d'un site vers un autre, puis mettre à jour les URL du service Web dans votre code pour qu'elles pointent vers le nouveau site. Utilisez les fichiers de configuration pour définir les URL de vos services.

Le script ci-dessous vous permet de mettre à jour les URL de votre code. Le code recherche de manière récursive les fichiers dans un dossier que vous spécifiez, il recherche une chaîne spécifique, telle que http://myDevServer/arcgis, et la remplace par l'emplacement de votre site intermédiaire ou de production, à savoir http://myProdServer/arcgis, par exemple.

Avant de lancer ce script, effectuez une copie de sauvegarde des fichiers d'application d'origine. Sachez également que le script vous permet de spécifier l'extension des fichiers texte que vous souhaitez traiter. Par exemple, .xml pour les fichiers de configuration ArcGIS Viewer for Flex, .js et .html pour les fichiers ArcGIS API for JavaScript, etc.

Lorsque vous avez remplacé les URL à l'aide du script, vous pouvez copier les fichiers d'application sur le serveur suivant du workflow (intermédiaire ou production).

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
6/13/2014