Pregunta

Estoy construyendo una aplicación piramidal que necesita servir azulejos de mapa a un mapa web de OpenLayers.

Tilestache es un servidor de mosaico WMS que sirve los mosaicos que necesito, y quiero acceder a él como una vista en mi aplicación Pyramid.

Por sí solo, visitando la url tilestache, www.exampletilestacheurl.com/LAYERNAME/0/0/0.png, funciona muy bien: devuelve el mosaico correctamente.

En Pyramid, quiero envolver la aplicación Tilestache como una vista usando pyramid.wsgi.wsgiapp. Mi objetivo es que visitar www.mypyramidapp.com/tilestache/LAYERNAME/0/0/0.png Funcionaría al igual que el ejemplo de URL Tilestache anterior.

Envolví la aplicación Tilestache para ser 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]

Y asignó una ruta para la vista en myapp.__init__.main:

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

Pero cuando visito cualquier URL comenzando con www.mypyramidapp.com/tilestache/, solo regresa IndexError: list index out of range. ¿Alguien está familiarizado con cómo funciona WSGIAPP?

¿Fue útil?

Solución

Si Tile_App es una aplicación WSGI, debe devolver el resultado de llamarlo así ...

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: moví la creación de la aplicación al nivel del módulo para que se cree en la importación y no cada vez que se maneja una solicitud. Ese podría no ser el comportamiento que está buscando, pero la mayoría de las veces lo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top