Как обслуживать приложение wsgi из пирамиды?

Я создаю приложение Pyramid, которое должно обслуживать листы карты на веб-карте OpenLayers.

TileStache - это сервер плиток WMS, который обслуживает нужные мне плитки, и я хочу получить к ним доступ в качестве представления в моем приложении Pyramid.

Самостоятельно, посещая URL TileStache, www.exampletilestacheurl.com/LAYERNAME/0/0/0.png, отлично работает - возвращает плитку правильно.

В Pyramid я хочу обернуть приложение TileStache как представление, используя pyramid.wsgi.wsgiapp, Моя цель состоит в том, чтобы посещение www.mypyramidapp.com/tilestache/LAYERNAME/0/0/0.png будет работать так же, как в приведенном выше примере URL TileStache.

Я обернул приложение TileStache для просмотра:

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]

И назначил маршрут для просмотра в myapp.__init__.main:

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

Но когда я посещаю любой URL, начинающийся с www.mypyramidapp.com/tilestache/просто возвращается IndexError: list index out of range. Кто-нибудь знает, как работает wsgiapp?

1 ответ

Решение

Если tile_app является приложением wsgi, вам нужно вернуть результат его вызова следующим образом...

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)

примечание: я переместил создание приложения на уровень модуля, чтобы оно создавалось при импорте, а не при каждой обработке запроса. это может быть не то поведение, которое вы ищете, но в большинстве случаев это так.

Другие вопросы по тегам