如何解决Tornado官方规范“Hello,world”示例应用程序的错误?

时间:2014-03-24 10:20:52

标签: python nginx centos tornado uwsgi

My python version is 2.7.2

python由uwsgi运行 我的nginx配置是

location /{

uwsgi_pass 127.0.0.1:8888;

include uwsgi_params;

}

app.py

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    application.listen(9090)
    tornado.ioloop.IOLoop.instance().start()

然后我跑了#34;我跑了" uwsgi -s:9090 -w app"

但是它会引发错误

[pid:28719 | app:0 | req:21/21] 118.207.180.64(){38 vars in 716 bytes} [Sun Mar 23 22:44:34 2014] GET / =>在0毫秒内生成0个字节(HTTP / 1.1 500)0个字节中的0个标头(核心0上的0个开关)AttributeError:应用程序实例没有调用方法

如何解决?

3 个答案:

答案 0 :(得分:1)

import tornado.web
import tornado.wsgi
import wsgiref.simple_server

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

if __name__ == "__main__":
    application = tornado.wsgi.WSGIApplication([
        (r"/", MainHandler),
    ])
    server = wsgiref.simple_server.make_server('', 8888, application)
    server.serve_forever()

(来自official docs

答案 1 :(得分:0)

Tornado是一个HTTP服务器,而不是WSGI容器(它可以用作WSGI容器,就像x3al的答案一样,但是你失去了一些最有趣的功能)。使用nginx proxy_pass选项代替uwsgi_pass;可以在http://www.tornadoweb.org/en/stable/overview.html#running-tornado-in-production

找到完整的nginx配置示例

答案 2 :(得分:0)

问题是您将龙卷风应用程序作为uwsgi应用程序传递。这是修复,使用龙卷风4.0 +中提供的WSGIAdapter

import tornado.ioloop
import tornado.web
import tornado.wsgi

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


t_application = tornado.web.Application([
    (r"/", MainHandler),
])
application = tornado.wsgi.WSGIAdapter(app)  # For wsgi layer

if __name__ == "__main__":

    t_application.listen(9090)
    tornado.ioloop.IOLoop.instance().start()

但是通过WSGI适配器使用Tornado,您将失去Tornado提供的一些最有趣的功能。在4.0版之前,WSGIApplication可用。