我有一个用 Python 2.7 / Tornado 编写的服务器,我正在尝试在AWS上部署它。 我遇到了 AWS Elastic Beanstalk ,这看起来像是一种非常方便的方法来部署我的代码。
我完成了这个tutorial,并且能够部署Flask示例应用。 但是,我无法弄清楚如何部署如下所示的测试龙卷风应用程序。
import tornado.web
import tornado.ioloop
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
if __name__ == "__main__":
app = tornado.web.Application([
(r"/.*", MainHandler),
])
app.listen(5000)
tornado.ioloop.IOLoop.current().start()
当我尝试部署上述应用程序并且我不知道如何解决此问题时,我的所有请求都会导致错误500,因为我不知道Flask示例是如何工作的但是Tornado代码不是。
requirements.txt 文件中有一个龙卷风== 4.4.2的条目。
我尝试添加一些日志语句来写入外部文件但是文件没有被创建,这可能意味着应用程序甚至没有启动。
如果有人能够在AWS-EB 上部署Tornado应用程序提供一些步骤,或者我应该如何开始对此进行故障排除,那就太棒了。 如果我需要提供更多详细信息,请与我们联系。
谢谢!
在注意到httpd error_log文件,AWS Documentation和Berislav Lopac的回答中的错误之后,我找到了实现Tornado服务器的正确方法。 这是一个简单的服务器
import tornado.web
import tornado.wsgi
import tornado.ioloop
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
webApp = tornado.web.Application([
(r"/", MainHandler),
])
# Wrapping the Tornado Application into a WSGI interface
# As per AWS EB requirements, the WSGI interface must be named
# 'application' only
application = tornado.wsgi.WSGIAdapter(webApp)
if __name__ == '__main__':
# If testing the server locally, start on the specific port
webApp.listen(8080)
tornado.ioloop.IOLoop.current().start()
答案 0 :(得分:1)
我认为您的问题与Elastic Beanstalk使用WSGI服务Python Web应用程序这一事实有关,而Tornado的服务器不符合WSGI。在通过WSGI提供应用之前,您可能希望尝试将应用程序包装在WSGI adapter中。
除非您依赖Tornado的异步功能,否则这应该可以正常工作,因为WSGI是严格同步的。
答案 1 :(得分:1)
您可以使用WSGI mod
部署tornado应用程序import tornado.web
import tornado.wsgi
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
tornado_app = tornado.web.Application([
(r"/", MainHandler),
])
application = tornado.wsgi.WSGIAdapter(tornado_app)