Domanda

Sto costruendo un'applicazione piramidale che deve servire le piastrelle di mappa su una mappa Web OpenLayers.

Tilestache è un server di piastrelle WMS che serve le piastrelle di cui ho bisogno e voglio accedervi come vista nella mia app piramide.

Da solo, visitando l'URL di Tilestache, www.exampletilestacheurl.com/LAYERNAME/0/0/0.png, funziona alla grande: restituisce correttamente la piastrella.

In Pyramid, voglio avvolgere l'app Tilestache come vista utilizzando pyramid.wsgi.wsgiapp. Il mio obiettivo è che visitare www.mypyramidapp.com/tilestache/LAYERNAME/0/0/0.png Funzionerebbe proprio come l'esempio di URL di Tilestache sopra.

Ho avvolto l'app TileStache per essere una vista:

from pyramid.wsgi import wsgiapp

@wsgiapp
def tileserver(environ, start_response):
    # Enable TileStache tile server
    import TileStache
    tile_app = TileStache.WSGITileServer('tilestache/tilestache.cfg', autoreload=False)
    return [tile_app]

E assegnato un percorso per la vista in myapp.__init__.main:

from tilestache import tileserver
config.add_view(tileserver, name='tilestache')
config.add_route('tilestache', '/tilestache')

Ma quando visito qualsiasi URL a partire da www.mypyramidapp.com/tilestache/, ritorna solo IndexError: list index out of range. Qualcuno ha familiarità con come funziona WSGIAPP?

È stato utile?

Soluzione

Se Tile_App è un'applicazione WSGI, è necessario restituire il risultato di chiamarlo così ...

from pyramid.wsgi import wsgiapp

# Enable TileStache tile server
import TileStache
tile_app = TileStache.WSGITileServer('tilestache/tilestache.cfg', autoreload=False)

@wsgiapp
def tileserver(environ, start_response):

    return tile_app(environ, start_response)

Nota: ho spostato la creazione dell'app a livello di modulo in modo che venga creata all'importazione e non ogni volta che viene gestita una richiesta. Potrebbe non essere il comportamento che stai cercando, ma la maggior parte delle volte è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top