Comment installer Java6, Apache 2.2 et Tomcat sur Linux Ubuntu 7.10

Note : Pour installer les éléments avec le tutoriel suivants vous devez disposer d’une connexion internet. Celle-ci vous permettra de récupérer les paquets dépend de ce que vous aller instastaller.

Mise en place de l’environnement Java 6

Nous allons installer la dernière version disponible de Java.

sun-java6-jdk
sun-java6-jre
sun-java6-bin
sun-java6-plugin

Tapez les commandes suivantes dans votre terminal :

sudo aptitude update
sudo aptitude install sun-java-jdk sun-java6-plugin

Installation de Apache2

Pour éviter les prises de tête, j’ai installé Apache2 en suivant une méthode rapide. J’ai donc installé les paquets synaptics disponibles.

apache2
apache2-mpm-prefork
apache2-utils
apache2.2-common

Pour les installer il faut faire :

sudo aptitude install apache2 apache2.2-common apache2-mpm-prefork apache2-utils

Ensuite, il ne vous reste plus qu’à ouvrir notre navigateur internet et lancer http://localhost

Installation de Tomcat6

Pour cette installation, j’ai du procéder un peu différemment étant donné que les paquets synaptics ne correspondent pas à la dernière version mais à la 5.5. J’ai donc procéder à une installation manuelle de ce programme disponible sur le site de la Fondation Logiciel Apache « The Apache Software Foundation » (Vérifiez ici la dernière version disponible)

Nous allons procéder au téléchargement de l’archive :

wget http://apache.cict.fr/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.tar.gz

Ensuite, nous décompressons ce paquet :

tar xvzf apache-tomcat-6.0.16.tar.gz

Maintenant nous allons déplacer les fichiers dans le répertoire courant de nos applications. Comme les programmes installés manuellement par les utilisateurs se trouvent dans /usr/local, nous allons déplacer nos fichier vers /usr/local/tomcat :

sudo mv apache-tomcat-6.0.16 /usr/local/tomcat

Avant de pouvoir commencer à lancer notre serveur, nous devons définir la variable JAVA_HOME correspondant à la localisation des fichier jmv indispensable l’exécution du serveur. Pour cela , nous allons éditer le fichier .bashrc (ce fichier est utilisé par le système lors de l’exécution d’un fichier bash) :

sudo gedit .bashrc

Coller dans l’en-tête la ligne suivante :

export JAVA_HOME=/usr/lib/jvm/java-6-sun

Vous pouvez désormais lancer Tomcat en faisant :

sudo sh /usr/local/tomcat/bin/startup.sh

Vous pouvez visualiser la page d’accueil du serveur en cliquant sur ce lien http://localhost:8080 (ce lien dépend du port défini par défaut avec Tomcat. Des fois le port par défaut correspond au 8180 mais pas dans le cas de cette installation.

Création du script de lancement de notre Serveur

Ce script permet de faire un démarrage ou un arrêt de notre serveur Tomcat. Il est placé avec tous les autres scripts de démarrage dans /etc/init.d. Nous allons à présent créer ce script :

sudo gedit /etc/init.d/tomcat

Collez le script suivant dedans et souriez :)

#! /bin/bash
# Démarage et arrêt du serveur Tomcat.
#
NAME="Tomcat 6.0.16"
TOMCAT_HOME=/usr/local/tomcat
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/lib/jvm/java-6-sun
CATALINA_OPTS="-Dfile.encoding=UTF-8"
LC_ALL=fr_FR
export TOMCAT_HOME CATALINA_HOME JAVA_HOME CATALINA_OPTS LC_ALL
cd $TOMCAT_HOME/logs
case "$1" in
start)
echo -ne "Lancement du serveur $NAME.\n"
sh $TOMCAT_HOME/bin/startup.sh
;;
stop)
echo -ne "Arrêt du serveur $NAME.\n"
sh $TOMCAT_HOME/bin/shutdown.sh
;;
*)
echo "Usage: /etc/init.d/tomcat {start|stop}"
exit 1
;;
esac
exit 0

Pour lancer le serveur, vous pouvez maintenant taper :

sudo /etc/init.d/tomcat start

Pour arrêter le serveur, vous pouvez taper :

sudo /etc/init.d/tomcat stop

Gestion des lancements et fermetures automatique avec le système

Cela se gère avec les runlevels (voir sur wikibooks). Dans notre cas, le runlevel correspond à 2. En effet Ubuntu possède un noyau Debian et le Runlevel 2 y est défini par défaut.
Pour vérifier, il suffit de taper :

runlevel
R 2

Mais nous allons tous de même modifier l’ensemble des runlevels.
Nous devons paramétrer notre serveur pour qu’il ce lance juste avant celui d’Apache2 car le module JK nécessaire à la connexion à besoin de trouver Tomcat ouvert pour s’y connecter dessus. Inversement, on fermera Apache avant de fermer Tomcat. Cela permettre d’éviter les erreurs.

Vérification des lancements et fermetures de processus de Apache2 suivant les runlevels:

sysv-rc-conf --list apache2
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Cette commande a l’avantage de remplacer le chkconfig car il n’est pas disponible sur debian. Toutefois il vous faudra l’installer au préalable (taper: sudo aptitude install sysv-rc-conf.

Nous observons que notre fichier existe dans 7 runlevel. Nous allons maintenant observer quel numéro correspond au lancement et à la fermeture de nos processus.

ls /etc/rc0.d | grep apache
K09apache2
ls /etc/rc1.d | grep apache
K09apache2
ls /etc/rc2.d | grep apache
S91apache2
ls /etc/rc3.d | grep apache
S91apache2
ls /etc/rc4.d | grep apache
S91apache2
ls /etc/rc5.d | grep apache
S91apache2
ls /etc/rc6.d | grep apache
K09apache2

Nous allons maintenant passer nos Runlevel 2 3 4 5 en S90 et et les numéro 0 1 6 en K10 (sachant que K =kill et S=start )

sudo ln -s /etc/init.d/tomcat /etc/rc0.d/K10tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K10tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc6.d/K10tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S90tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc3.d/S90tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc4.d/S90tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc5.d/S90tomcat

Couplage Tomcat6 – Apache2

Installation du module JK

En cours …..
cd /home/ccibrest/Download/serveur
wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.26/i386/mod_jk-1.2.26-httpd-2.2.6.so

Publié dans HowTo, Serveur | Marqué avec , , , , | Laisser un commentaire

Comment utiliser MapFish avec un serveur Apache

>> Document officiel “HowTo MapFish Server Apache” non traduit disponible ici

Ce tutoriel décrit comment faire fonctionner MapFish avec un serveur Apache en utilisant le module mod_wsgi.

Dans la dernière section « Comment utiliser le Serveur MapFish », nous avons montré comment lancer un projet MapFish sur le serveur Web embarqué Paster. Cette section décrit comment utiliser Apache au lieu de paster.

Installer le module mod_wsgi

Assurez-vous d’avoir installé apache2-prefork-dev et suivez ces instructions (en anglais) pour compiler, installer le module mod_wsgi, et configurer éventuellement un hôte virtuel.

Vous devez ajouter, en plus de la configuration d’Apache fournie sur cette page, la directive WSGIDaemonProcess précisant qu’un seul processus doit être utilisé (wsgi.multiprocess = False). Pour que ce soit bon, vous devez avoir quelque chose de similaire à cela :

    WSGIProcessGroup monapplication
    Order allow,deny
    Allow from all
 
WSGIScriptAlias /wsgi /chemin/vers/votre/répertoire/wsgi/monapplication.wsgi
WSGIDaemonProcess myapp threads=25

Maintenant, créez un fichier nommé wsgi.load dans le répertoire des modules Apache (/etc/apache2/mods-available) avec ce contenu:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

Désormais vous pouvez activer le module wsgi dans Apache (a2enmod wsgi) et redémarrer Apache.

Création d’un script de démarrage

Vous avez maintenant besoin d’écrire le script monapplication.wsgi. Ce script est le point d’accès de votre application MapFish.

import site
import os, sys
 
site.addsitedir('/chemin/vers/vpython/lib/pythonX.Y/site-packages')
 
sys.path.append('chemin/vers/MonProjetMapFish')
os.environ['PYTHON_EGG_CACHE'] = '/var/www/python-eggs'
 
from paste.deploy import loadapp
application = loadapp('config:chemin/vers/MonProjetMapFish/development.ini')

Évidemment, vous devez adapter le script ci-dessus à votre configuration.

Note : site.addsitedir() ajoute les bibliothèques de l’environnement virtuel python (virtualenv). Regardez l’article (en anglais) du blog de Ian Bicking pour plus de détails.

Liens utiles :
le Wiki de Pylons : workingenv.py et le module mod_wsgi (en anglais)
Google Code : Intégration du module wsgi avec Pylons (en anglais)
Google Code : Le module wsgi (en anglais)

Publié dans API Web, HowTo | Marqué avec , , , | Laisser un commentaire

Comment créer un Widget pour MapFish

>> Document officiel “HowTo Create Widgets” non traduit disponible ici

Dans cette page vous trouverez une sorte de tutoriel pour apprendre comment créer votre propre widget client MapFish. Vous apprendrez aussi à le construire avec ExtJS pour qu’il puisse être masqué et à l’intégrer facilement dans un mise en page complexe si vous le souhaitez.

Avant de commencer

Ce tutoriel suppose que vous avez déjà installé MapFish. Sinon, allez à la page d’installation et suivez les instructions. Après, vous pourrez revenir le lire.
Cela suppose également que vous savez déjà comment utiliser un widget MapFish dans votre code. Référez vous à ce tutoriel si ce n’est pas le cas puis revenez après ;-)

Constructeur de Widget

Dans ce didacticiel, nous allons construire un widget qui va créer une liste désordonné de villes dont l’utilisateur pourra centrer dessus.
Commençons par le code Javascript. Créez un nouveau fichier Javascript nommé Locations.js (c’est un nom arbitraire), contenant le code ci-dessous :

/**
 * @requires OpenLayers/Map.js
 */
 
Ext.namespace('mapfish.widgets');
 
mapfish.widgets.Locations = function(config) {
    Ext.apply(this, config);
    mapfish.widgets.Locations.superclass.constructor.call(this);
}
 
Ext.extend(mapfish.widgets.Locations, Ext.Container, {
    // code is to be added here
});

Tout d’abord, nous mettons quelques annotations (@requires). Ces annotations sont nécessaires si vous avez l’intention d’utiliser le constructeur de script JavaScript pour MapFish. Dans notre cas, la classe OpenLayers.Map est nécessaire car nous utiliserons la méthode zoomTo ().

Ensuite, nous définissons le constructeur mapfish.widgets.Locations . Le constructeur appelle Ext.apply () pour que chaque option de configuration deviennent une propriété de l’objet. Il appelle également de ses constructeurs parents.

Ext.extend () sert à définir notre classe mapfish.widgets.Locations.
Mapfish.widgets.Locations hérite de Ext.Container. Hériter de Ext.Container est essentiel afin d’ajouter des gadgets dans notre Ext layout. Le code de la classe est situé dans le troisième argument Ext.extend ().

Échantillon d’une page HTML

Nous allons créer un nouveau fichier « locations_simple.html » avec le code suivant :

<html>
<head>
  <title>MapFish Tutorial - How To Create Widgets</title>
  <link rel="stylesheet" type="text/css" href="/chemin/vers/mfbase/ext/resources/css/ext-all.css" />
 
  <script type="text/javascript" src="/chemin/vers/mfbase/openlayers/lib/OpenLayers.js"></script>
  <script type="text/javascript" src="/chemin/vers/mfbase/ext/adapter/ext/ext-base.js"></script>
  <script type="text/javascript" src="/chemin/vers/mfbase/ext/ext-all-debug.js"></script>
  <script type="text/javascript" src="/chemin/vers/mfbase/mapfish/MapFish.js"></script>
  <script type="text/javascript" src="Locations.js"></script>
 
  <script type="text/javascript">
    Ext.onReady(function() {
        var map = new OpenLayers.Map($('olmap'));
 
        var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", 
            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}, {buffer: 0});
 
        map.addLayers([wms]);
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.zoomToMaxExtent();
 
        var data = [['Paris', new OpenLayers.LonLat(2.3333333, 48.8666667), 6],
                    ['Buenos Aires', new OpenLayers.LonLat(-58.6725, -34.5875), 6],
                    ['Amsterdam', new OpenLayers.LonLat(4.9166667, 52.35), 6],
                    ['Dakar', new OpenLayers.LonLat(-17.4380556, 14.6708333), 6]];
 
        var locations = new mapfish.widgets.Locations({
            map: map,
            el: 'myDiv',
            data: data
        });
        locations.render();
    });
  </script>
</head>
<body>
  <span></span>
  <div id="myDiv"></div>
  <div id="olmap" style="width:450px;height:300px;background-color:#999;"></div>
 </body>
</html>

Maintenant, nous devons revenir à notre widget et générer des éléments cliquables suivant une liste à puces non ordonnée. Celle-ci sera basée sur les données passées en argument.
Dans cet exemple, les données sont stockées dans un tableau, en général, il est préférable d’utiliser la classe Ext SimpleStore.

Initialisation du widget

Ensuite, revenez au code javascript du widget et ajoutez cela :

    // private
    onRender: function(container, position) {
        mapfish.widgets.Locations.superclass.onRender.apply(this, arguments);
 
        // do something here
        var ul = document.createElement("ul");
        for (var i = 0; i < this.data.length; i++) {
            var li = document.createElement("li");
            var link = document.createElement("a");
            link.href = "javascript:void(0)";
            var text = document.createTextNode(this.data[i][0]);
            link.appendChild(text);
            li.appendChild(link);
            ul.appendChild(li);
 
            Ext.EventManager.on(link, 'Cliquez',
                function(evt, el, options){
                    this.map.setCenter(options.location, options.zoomLevel);
                },
                this,
                {location: this.data[i][1], zoomLevel: this.data[i][2]}
            );
        }
        this.el.dom.appendChild(ul);
    }

La méthode OnRender () est une méthode de rappel déclenché par la classe étendueExt.Container lorsque la méthode render est appelée pour un objet de cette classe lorsque cet objet est masqué par un autre élément de mise en page.
Dans ce code, il faut d’abord appeler la méthode de superclasse onRender () . Ensuite nous construisons la liste à puces de l’ensemble objets dépendant des données. Nous avons également enregistrer une vue sur l’événement du lien « Cliquez » qui fera appel de la méthode setCenter () (méthode pour centrer notre carte).

Essayez dans votre navigateur.

Un widget dans une mise en page complexe

Maintenant, ce que nous voulons , c’est obtenir la même chose mais dans une mise en page complexe.
Tout d’abord, ajoutons le code suivant au début de la méthode onRender () dans la classe Locations :

if (!this.el) {
            this.el = document.createElement('div');
        }

Nous avons besoin de ce bout de code parce que dans les mises en pages complexes, nous n’avons pas vraiment d’élément DOM existant pour rappeler l’élément. C’est souvent un rendu masqué. En effet, dans ces cas, nous ne renseignons pas le paramètre optionnel « el ».

Nous allons maintenant créer un nouveau fichier locations_layout.htmlen copiant simplement ce code javascript :

    Ext.onReady(function() {
        var map = new OpenLayers.Map($('olmap'));
 
        var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", 
            "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}, {buffer: 0});
 
        map.addLayers([wms]);
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.zoomToMaxExtent();
 
        var data = [['Paris', new OpenLayers.LonLat(2.3333333, 48.8666667), 6],
                    ['Buenos Aires', new OpenLayers.LonLat(-58.6725, -34.5875), 6],
                    ['Amsterdam', new OpenLayers.LonLat(4.9166667, 52.35), 6],
                    ['Dakar', new OpenLayers.LonLat(-17.4380556, 14.6708333), 6]];
 
        var locations = new mapfish.widgets.Locations({
            map: map,
            data: data
        });
 
        var mapcomponent = new mapfish.widgets.MapComponent({map: map});
 
        var window = new Ext.Window({
            title: 'Map',
            width: 500,
            height:300,
            minWidth: 300,
            minHeight: 200,
            layout: 'fit',
            plain:true,
            bodyStyle:'padding:5px;',
            items: mapcomponent
        });
        window.show();
 
        var window = new Ext.Window({
            title: 'Cities',
            width: 200,
            height:150,
            minWidth: 200,
            minHeight: 100,
            layout: 'fit',
            plain:true,
            bodyStyle:'padding:5px;',
            items: locations
        });
        window.setPagePosition(20, 40);
        window.show();
    });

Ce qui est important à noter:

  • Nous créons un composant de la carte (MapComponent) que nous utilisons comme un objet de la première fenêtre,
  • Nous avons supprimé le paramètre optionnel « el » de notre widget Locations,
  • Le widget Locations est utilisé comme un objet de la deuxième fenêtre.

Rafraîchissez votre page dans le navigateur et appréciez!

Pièces jointes :
Locations.js (1,3 kB) – ajouté par pgiraud le 11/05/07 16:54:46.
Locations_simple.html (1,6 kB) – ajouté par pgiraud le 11/05/07 16:54:58.
Locations_layout.html (2,3 kB) – ajouté par pgiraud le 11/05/07 16:55:15.

Publié dans API Web, HowTo, Informatique | Marqué avec , , , | Laisser un commentaire

Comment créer un fichier MapFish.js compressé

Document officiel “How ToBuild” non traduit disponible ici

MapFish Client fournit des scripts pour créer un fichier JavaScript illisible mais fonctionnel, MapFish.js, contenant l’intégralité du code JavaScript de MapFish et d’OpenLayers.
Ces scripts sont situés dans MapFish/client/build.

Adepte de la facilité :

La façon la plus simple de construire MapFish.js est de lancer le script build.sh :

sh /path/to/MapFish/client/build/build.sh

Cela créera le fichier MapFish.js sous MapFish/client/mfbase/release.
Build.sh étant un script shell, cette méthode est inadapté sous Windows.

Informations complémentaires

Build.sh utilise build.py en interne. Build.py est un script récupéré sur OpenLayers et adapté à MapFish. Ainsi, vous pouvez utiliser directement build.py :

cd /chemin/vers/MapFish/client/build
python build.py -c mapfish-widgets -o /chemin/vers/MapFish.js

Utilisez build.py python --help pour en savoir plus sur les options qui peuvent être passées avec la commande build.py.
Si build.py est exécuté sans argument, mapfish-widgets et ./MapFish.js seront respectivement pris comme le profil et l’emplacement par défaut.

Publié dans API Web, HowTo | Marqué avec , , | Laisser un commentaire

Comment utiliser MapFish serveur

Document officiel “How To Use MapFish Server” non traduit disponible ici

Ce tutoriel décrit étape par étape comment utiliser le framework MapFish coté Serveur et mettre en place un projet MapFish. Un projet MapFish définit les Services Web sur lesquels les composants Clients MapFish peuvent s’appuyer. Voir le Protocole MapFish pour la description des interfaces fournies par les Services Web de MapFish.

Attention : Ce tutoriel de MapFish suppose que le fichier egg est installé.

Sinon, allez à la page Comment Installer Mapfish.

Attention: Les fichiers eggs de MapFish-0,1 version 0.1 (fournis sur http://dev.camptocamp.com/packages/eggs/) ne supportent pas les commandes paster. Par conséquent, assurez-vous que les fichiers egg utilisés pour votre installation proviennent d’une version de MapFish 0,1. S’il n’y en a pas(ce qui est le cas au moment d’écrire ces lignes), alors construisez et installez le fichier egg de MapFish à partir du tronc SVN.

Créer un projet MapFish

Paster est utilisé pour créer des projets MapFish:

/chemin/vers/vpython/bin/paster create --overwrite --no-interactive --template=mapfish MonPojetMapFish mapfishclientmfbasepath=/chemin/vers/MapFish/client/mfbase

Remplacez MonPojetMapFish par le vrai nom de votre projet. Dans la suite de ce tutoriel, vous vous réfèrerez au nom de votre projet dés que nous utiliserons le nom MonProjetMapFish.

Note : la commande ci-dessus suppose que vous avez installé le fichier egg de MapFish avec ses dépendances dans un environnement virtuel Python. Votre projet est maintenant créé. Plus concrètement, un répertoire nommé MonProjetMapFish contenant divers dossiers a été créé. Ceci est votre répertoire de projet.

Un projet MapFish est vraiment comme un projet Pylons avec quelques spécificités géo-orienté.

Mettre en place des connexions PostGIS

Pour configurer des connexions PostGIS, éditez le fichier de configuration development.ini et ajoutez des lignes sous cette forme dans la section [app: main_pylons]:

sqlalchemy.<db>.url = postgres://<dbuser>:<dbpassword>@<dbhost>/<db>

Remplacer , , et par les caractéristiques appropriées.

Si vous avez besoin de vous connecter à plusieurs bases de données, vous devez ajouter plusieurs lignes de ce type.

Mettre en place des couches

Vous avez maintenant besoin de créer des calques. En effet, une couche correspond à une table de votre base de données PostGIS. Pour créer des couches, vous devez éditer le fichier layers.ini et ajouter vos couches suivant l’exemple donné dans le fichier suivant.

Exemple de configuration d’une couche unique:

# fichier de configuration des couches
#
# ps: j'ai conservé les noms des exemples car
# ce sont ceux que vous utiliserez pour débuter
# Example:
#
# [users]
# singular=user
# db=dbname
# table=users
# epsg=4326
# units=degrees
# geomcolumn=the_geom
# idcolumn=Integer:id
 
[countries]
singular=country
db=geostat
table=world_factbk_simplified
epsg=4326
units=degrees
geomcolumn=simplify
idcolumn=Integer:gid

Note: conventionnellement vous utilisez comme nom de couche le pluriel du mot utilisé. Vous devez également fournir un nom singulier. En réalité, ce nom peut être n’importe quoi, mais pour que le code généré soit propre il vaut mieux envisager d’utiliser le singulier nom associé au nom de la couche.

Générer le modèle et le contrôleur de code

Maintenant, il est temps pour vous de comprendre paster et le code de MapFish généré.

Si vous avez créé un calque countries (comme dans l’exemple ci-dessus) utiliser cette commande :

/chemin/vers/vpython/bin/paster mf-layer countries

Cette commande crée trois fichiers : le fichier contrôleur, son fichier de test associé, et un modèle de fichier.

Jetez un coup d’œil au niveau du contrôleur et du modèle de fichiers histoire de vous faire une idée sur ce que le générateur de code a fait pour vous. Pour faire des choses sophistiqués, vous devrez éditer ces fichiers de toute façon, alors ne soyez pas timide …

Note : deux autres commandes paster sont fournies par MapFish: mf-controller et mf-model.

Le premier s’occupe de la création du contrôleur. Le dernier porte sur le modèle. À l’intérieur, le mf-layer compose le mf-controller et le mf-model.

Terminer la configuration

Dans un monde parfait, vous n’auriez plus rien à faire. Or, le monde n’est pas (encore) parfait. Vous devrez donc modifier certains fichiers pour terminer la configuration vos couches.

Allez dans le répertoire MonProjetMapFish et éditer les fichiers:

  1. Config/environment.py

    trouver la ligne :

    from pylons import config

    Ajoutez la ligne suivante après :

    from sqlalchemy import engine_from_config

    Et celle-là à la fin du fichier:

         config['pylons.g'].sa_geostat_engine = engine_from_config(config, 'sqlalchemy.geostat.')

    Cette dernière ligne crée un moteur de base de données sqlalchemy associée à votre base de données. De toute évidence, le mot geostat doit être remplacé par le nom de la connexion à votre de base de données (celle que vous avez configuré dans le fichier development.ini)

    Note: N’oubliez pas l’importance de l’indentation en Python! La ligne doit être en retrait pour faire partie de la fonction load_environment().

  2. Config/routing.py

    La configuration du routage de certaines URL est nécessaire. Ajoutez les lignes suivantes :

          map.connect('countries/', controller='countries', action='show', conditions=dict(method=['GET']))
          map.connect('countries/:(id).:(format)', controller='countries', action='show', conditions=dict(method=['GET']))

    Avant les lignes pour les routespar défaut :

          map.connect(':controller/:action/:id')
          map.connect('*url', controller='template', action='view')

    Encore une fois, vérifiez vos indentations!

    Consultez la documentation sur les routes (en anglais) pour en savoir plus sur la configuration du routage.

  3. Modèle/__init__.py

    La couche doit être liée au moteur de la base de données. Modifiez le model/__init__.py et remplacez la ligne

    binds = {}

    Dans le cas de notre exemple par:

    binds = {'countries': MetaData(config['pylons.g'].sa_geostat_engine)}
  4. Lib/base.py

    La dernière chose à faire est de changer le code BaseController. La classe BaseController doit ressembler à ceci:

    class BaseController(WSGIController):
     
        def __call__(self, environ, start_response):
            try:
                """Invoke the Controller"""
                # WSGIController.__call__ dispatches to the Controller method
                # the request is routed to. This routing information is
                # available in environ['pylons.routes_dict']
                return WSGIController.__call__(self, environ, start_response)
            finally:
                model.Session.remove()

    La méthode .remove() est très importante! Voir cette page pour plus de détails.

Démarrage du serveur Web

Maintenant tout devrait être configuré. Essayez de démarrer le serveur web paster:

/path/to/vpython/bin/paster serve --reload development.ini

Et vérifiez : http://localhost:5000/countries?maxfeatures=10

Votre navigateur devrait afficher un joli objet GeoJSON!

Vous pouvez maintenant revenez à votre page Web et configurez le widget de MapFish pour accéder à votre calque via l’URL http://localhost:5000/countries .

Si vous avez ce message d’avertissement :

/chemin/vers/vpython/lib/python2.4/site-packages/SQLAlchemy-0.4.0-py2.4.egg/sqlalchemy/databases/postgres.py:497: RuntimeWarning: Did not recognize type 'geometry' of column 'the_geom'
warnings.warn(RuntimeWarning("Did not recognize type '%s' of column '%s'" % (attype, name)))

Ne vous inquiétez pas, c’est sans danger.

Publié dans API Web, Divertissement, Erreurs, Géomatique, HowTo, logiciel, Outils, Serveur, SGBD | Marqué avec , , | Laisser un commentaire

Comment Installer Mapfish

>> Document officiel “HowTo Install” non traduit disponible ici

Note : Je viens de m’apercevoir que la page vient de changer et qu’une nouvelle version (v0.2) est maintenant disponible en yeah :-) le seul hic c’est que je dois retraduire cette page. Pas Grave mais du coup cette traduction est à revoir.

Instructions d’installation

MapFish est un framework qui permet d’interagir avec des cartes. La première question que vous devez vous poser est de déterminer quelle partie du framework vous intéresse, et de quelle technologie vous voulez ou avez l’intention d’utiliser dans votre application.

Uniquement le côté Client

Si vous n’avez pas besoin de déployer des services côté serveur, il vous suffit d’utiliser la partie client du framework. C’est la façon la plus simple d’installer MapFish, car il vous suffit d’extraire l’archive dans un répertoire accessible à partir de votre serveur Web, et de modifier certaines balises HTML et/ou Javascript.

Télécharger l’archive MapFish-xy.tar.gz à partir de la page de téléchargement. Puis extraire son contenu, et rendre le répertoire client/mfbase disponible pour votre serveur Web.

Les composants côté serveur

Le framework MapFish prévoit des bibliothèques qui peuvent être utilisés coté serveur à partir de plusieurs langages. Dans les premières versions, seuls les modules Python sont disponibles. En utilisant ou en étendant ces services, vous pouvez faire face aux deux scénarios suivants :

  1. Vous voulez intégrer ces services dans votre projet. Dans ce cas, vous devez appliquer la colle entre votre application Web et la bibliothèque du serveur MapFish.
  2. Vous voulez utiliser ces services dans un standalone. Dans ce cas, MapFish fournit un module tiers qui s’appuie sur Pylons, un framework Python pour le Web, afin d’offrir un cadre existant où l’on peut déployer et étendre les services d’un serveur existant.

Les instructions ci-dessous indiquent comment mettre en place ce module tiers.

Mise en place du module MapFishSample

Parce que ce module utilise le framework Pylons, vous pouvez vous référer aux instructions fournies sur la page d’accueil de Pylons (en Anglais). Toutefois, les instructions ci-dessous devraient être suffisantes pour installer le framework et les modules nécessaires.

Les instructions pour Unix (Linux, OS X, …)

Installation d’un environnement virtuel Python

Installer les paquets gcc, libc6-dev, libpq-dev, python, python-dev et libgeos-dev.

Pour Debian tapez dans un terminal :

apt-get install gcc libc6-dev libpq-dev python python-dev libgeos-dev

Installez les outils d’installation s’ils ne sont pas déjà installés :

cd /tmp
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py

Installer virtualenv :

easy_install virtualenv

Maintenant vous pouvez créer votre environnement virtuel python (avec votre identifiant) :

cd /chemin/vers/le/lieu/souhaité/
virtualenv vpython

Il est maintenant temps d’installer l’archive egg de MapFish et ses dépendances. Deux choix sont possibles :

Installation du fichier egg précompilé de MapFish
cd vpython
bin/easy_install Pylons
bin/easy_install psycopg2
bin/easy_install -f http://dev.camptocamp.com/packages/eggs/ MapFish

Vous pouvez aller directement au démarrage du serveur Pylons.

Construction et installation de MapFish à partir des sources
cd /chemin/vers/le/lieu/souhaité/
svn co http://www.mapfish.org/svn/mapfish/trunk/MapFish
cd server/python
/chemin/vers/vpython/bin/python setup.py install

Démarrage du serveur

Vous pouvez obtenir le module MapFishSample sur la page de téléchargement.

Ensuite, vous devez extraire cette archive quelque part. Dans l’instruction suivante, ce chemin est appelé /chemin/vers/mapfishsample/MapFishSample.

Vous aurez aussi besoin de télécharger et extraire l’archive MapFish à un autre endroit.

Editer le fichier de configuration Pylons (qui se trouve dans /chemin/vers/mapfishsample/MapFishSample/development.ini), vous devez modifier la variable document_root de votre chemin d’installation MapFish/client/mfbase/.

En supposant que vous avez installé le fichier dans /chemin/vers/mapfish/, development.ini doit contenir :

...
[app:mfbase]
use = egg:Paste#static
# paramétrez ici le chemin vers le répertoire MapFish :
document_root = /chemin/vers/mapfish/MapFish/client/mfbase/
...
[app:examples]
use = egg:Paste#static
# Paramétrez ici le chmein vers les exemples de MapFish contenu dans le répertoire "client/examples" :
document_root = /chemin/vers/mapfish/MapFish/client/examples/
...
cd /chemin/vers/mapfishsample/MapFishSample/
/chemin/vers/vpython/bin/paster serve development.ini

Après cela, l’application Web sera disponible à l’URL http://localhost:5000/ .

Les instructions pour Windows

Les principales étapes d’installation pour Windows sont :

Télécharger easy_install.py et à partir de l’interpréteur de commande DOS tapez :

  1. Python easy_install.py Pylons
  2. Python easy_install.py sqlalchemy
  3. Téléchargez et installez à partir d’ici http://www.stickpeople.com/projects/python/win-psycopg/ psycopg2 (choisir le fichier en fonction de votre version de Python)
  4. Téléchargement à partir du tronc : svn co http://www.mapfish.org/svn/mapfish/trunk/MapFish
  5. construire le fichier egg
  6. Copier le fichier egg dans votre dossier site-packages situé dans le répertoire Python (Pour Python version 2.5 le répertoire par défaut est C:\Python25)
  7. Téléchargez et installez Shapely en utilisant l’installateur Windows téléchargeable sur http://pypi.python.org/pypi/Shapely

.. Maintenant, vous pouvez suivre les mêmes instructions que pour Linux afin de faire fonctionner des exemples ou créer de nouveaux projets.

Publié dans API Web, HowTo | Marqué avec , | 2 commentaires

Erreur Postgresql8.3 et PGadmin3 sous Ubuntu 7.10

Après avoir installé Postgresql version 8.3 et PGadmin3 version 1.4.3, je me suis rendu compte d’un petit problème. En effet, je me retrouve avec des belle erreurs:

ERREUR:  la colonne op.oprlsortop n'existe pas
LINE 12:   LEFT OUTER JOIN pg_operator lso ON lso.oid=op.oprlsortop
^
 ERREUR:  la colonne « opcamid » n'existe pas
LINE 3:   JOIN pg_am am ON am.oid=opcamid
^

En observant la base de donnée postgres, je me suis rendu compte que aucun opérateur et aucune classe d’opérateur n’existaient. Pour l’instant je pense que je vais désinstaller mes paquets installé avec aptitude est faire une installation manuel de PGadmin3 vu que la dernière version correspond à la 1.8.2 et que via aptitude je n’ai que la version 1.4.3. Sur le site de PostgreSQL, il est possible de récupérer la dernière version (plus récente que dans le dépôt Ubuntu 7.10). Je vous conseille donc de mettre à jour votre installation en suivant le tutoriel disponible sur PGadmin.

sudo aptitude install pgadmin3 pgagent

Et c’est parti pour une nouvelle installation

Publié dans Erreurs, Informatique | Marqué avec , | Laisser un commentaire

Les sigles et abréviations en géomatique et aménagement du territoire

J’ai conçu une petite carte heuristique (Mind Mapping) contenant les sigles que j’utilise. ceux-ci correspondent à différents domaines tels que:

  • l’aménagement,
  • la géomatique,
  • le tourisme,
  • le transport,
  • l’urbanisme,
  • l’environnement.

Vous pouvez visualiser cette carte en cliquant sur l’image ci-dessous.Sigles et acronymes en géomatique et aménagements

D’autres sigles sur le site de la DIACT

Publié dans Géomatique | Marqué avec , , , , , , , , , | Laisser un commentaire

Erreur d’installation WordPress:

——————————————————–

Configuration logiciel :

  • Windows XP Pro sp2
  • Serveur Wamp5 v1.7.2 (Apache2, PhP5, MySQL)

——————————————————–

Description de l’erreur :

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 98304 bytes) in C:\wamp\www\blog2fouine\wordpress\wp-admin\includes\user.php on line 87

Continuer la lecture

Publié dans Erreurs, Informatique | Marqué avec , , , , | Laisser un commentaire

Liste de site pour les infos utiles en Webmapping

Est voilà une liste non-exhaustive de liens permettant de mettre en place une Infrastructure de Données Spatiales :

Continuer la lecture

Publié dans logiciel | Marqué avec , , , , | Laisser un commentaire