2015-07-06 3 views
4

Я не могу запустить приложение торнадо, используя пушки. При запуске приложения появляется ошибка. Я хочу, чтобы запустить его с помощью gunicorn, потому что мне нужны хорошие функции, такие как: изящным тайм-аута, ответа тайм-аута и т.д. ...Невозможно запустить приложение торнадо с помощью gunicorn

смерч приложение:

$cat wsgi.py 

исходный код:

import tornado.web 
import tornado.wsgi 
from api.handler import MainHandler, ApiV2Handler, InvalidRequestHandler 


def app(*args): 
    app = tornado.web.Application([ 
     (r"/", MainHandler), 
     (r"(/v3/(\w+)/(\w+)/)", ApiV2Handler), 
     (r"(/v3/(\w+)/(\w+))", InvalidRequestHandler) 
    ]) 
    return tornado.wsgi.WSGIContainer(tornado.wsgi.WSGIAdapter(app)) 

Баш:

$ gunicorn wsgi:app --bind 127.0.0.1:9080 

отслеживающий:

[2015-07-06 14:41:16 +0000] [21806] [INFO] Starting gunicorn 19.3.0 
[2015-07-06 14:41:16 +0000] [21806] [INFO] Listening at: http://127.0.0.1:9080 (21806) 
[2015-07-06 14:41:16 +0000] [21806] [INFO] Using worker: sync 
[2015-07-06 14:41:16 +0000] [21811] [INFO] Booting worker with pid: 21811 
[2015-07-06 14:41:21 +0000] [21811] [ERROR] Error handling request 
Traceback (most recent call last): 
    File "venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle 
    self.handle_request(listener, req, client, addr) 
    File "venv/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 176, in handle_request 
    for item in respiter: 
TypeError: 'WSGIContainer' object is not iterable 
^C[2015-07-06 14:41:23 +0000] [21806] [INFO] Handling signal: int 
[2015-07-06 14:41:23 +0000] [21811] [INFO] Worker exiting (pid: 21811) 
[2015-07-06 14:41:23 +0000] [21806] [INFO] Shutting down: Master 

Любые идеи?

Update для Бен Дарнелл:

Я попытался это:

import tornado.web 
import tornado.wsgi 
from api.handler import MainHandler, ApiV2Handler, InvalidRequestHandler 


def app(*args): 
    app = tornado.web.Application([ 
     (r"/", MainHandler), 
     (r"(/v3/(\w+)/(\w+)/)", ApiV2Handler), 
     (r"(/v3/(\w+)/(\w+))", InvalidRequestHandler) 
    ]) 
    return tornado.wsgi.WSGIAdapter(app) 

Но результат тот же:

TypeError: 'WSGIAdapter' object is not iterable 
+1

Похоже, что gunicorn ожидает, что 'app' будет объектом' WSGIAdapter', а не функцией, возвращающей приложение WSGI. –

ответ

1

работает для меня:

gunicorn -k tornado wsgi:app 

wsgi.py

import tornado.web 
import tornado.wsgi 
from api.handler import MainHandler, ApiV2Handler, InvalidRequestHandler 

app = tornado.web.Application([ 
    (r"/", MainHandler), 
    (r"(/v3/(\w+)/(\w+)/)", ApiV2Handler), 
    (r"(/v3/(\w+)/(\w+))", InvalidRequestHandler) 
]) 

удачи!

+0

позволяет ли это использовать веб-узлы? –

0

Для работы в режиме WSGI, вернуть WSGIAdapter; не используйте WSGIContainer (WSGIContainer для перехода в другое направление, когда у вас есть приложение WSGI для запуска на сервере торнадо). Однако у пушки есть естественный режим торнадо, поэтому вы, вероятно, получите лучшие результаты в этом режиме, чем использование WSGI.

Смежные вопросы