Как обслуживать приложение 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)
примечание: я переместил создание приложения на уровень модуля, чтобы оно создавалось при импорте, а не при каждой обработке запроса. это может быть не то поведение, которое вы ищете, но в большинстве случаев это так.