2015-09-01 3 views
2

Мне нужно обернуть мое приложение Flask с помощью aiohttp. Когда я начинаю его, есть ошибка:Aiohttp wsgi handler не работает

This webpage has a redirect loop 

ERR_TOO_MANY_REDIRECTS 
ReloadHide details 
The webpage at http://localhost:5000/ has resulted in too many redirects. Clearing your cookies for this site or allowing third-party cookies may fix the problem. If not, it is possibly a server configuration issue and not a problem with your computer. 
Learn more about this problem. 

код:

import asyncio 
from flask import Flask 
from aiohttp import web 
from aiohttp_wsgi import WSGIHandler 

app = Flask(__name__) 

@app.route('/') 
def login(): 
    return 'Hello World' 

@asyncio.coroutine 
def init(loop): 
    wsgi_flask_app = WSGIHandler(app) 
    aio_app = web.Application(loop=loop) 
    aio_app.router.add_route('*', '/{path_info:.*}', wsgi_flask_app) 

    srv = yield from loop.create_server(
     aio_app.make_handler(), '127.0.0.1', 5000) 
    return srv 

if __name__ == '__main__': 
    io_loop = asyncio.get_event_loop() 
    io_loop.run_until_complete(init(io_loop)) 

    try: 
     io_loop.run_forever() 
    except KeyboardInterrupt: 
     print('Interrupted') 

, когда я изменить маршрут, как в this примере для

aio_app.router.add_route('*', '{path_info:.*}', wsgi_flask_app) 

он поднимает ValueError: путь должен быть началось с /. Что я делаю не так?

ответ

1

Метод «add_route» в aiohttp.router можно обойти со следующей конструкцией:

wsgi_route = DynamicRoute('*', wsgi_flask_app, 'wsgi_flask_app', 
          re.compile('^(?P<path_info>.*)$'), '{path_info}') 
app.router.register_route(wsgi_route) 

Но это не очень хорошо ИМХО решение. Это похоже на обратное-несовместимое изменение в aiohttp, и лучшим решением является использование другой версии aiohttp.

UPDATE:

С aiohttp-wsgi 0.2.5 version вы можете добавить маршруты начинаются с '/'.