Python 在AWS Elastic Beanstalk上部署Tornado应用程序

Python 在AWS Elastic Beanstalk上部署Tornado应用程序,python,amazon-web-services,amazon-elastic-beanstalk,tornado,Python,Amazon Web Services,Amazon Elastic Beanstalk,Tornado,我有一个用Python 2.7/Tornado编写的服务器,我正在尝试将其部署到AWS上。 我遇到了AWS Elastic Beanstalk,它看起来是部署代码的一种非常方便的方法 我经历了这些,并能够部署Flask示例应用程序。 但是,我不知道如何部署下面这样的测试tornado应用程序 import tornado.web import tornado.ioloop class MainHandler(tornado.web.RequestHandler): def get(se

我有一个用Python 2.7/Tornado编写的服务器,我正在尝试将其部署到AWS上。 我遇到了AWS Elastic Beanstalk,它看起来是部署代码的一种非常方便的方法

我经历了这些,并能够部署Flask示例应用程序。 但是,我不知道如何部署下面这样的测试tornado应用程序

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文件中有tornado==4.4.2的条目

我尝试添加一些日志语句来写入外部文件,但是没有创建文件,这可能意味着应用程序甚至没有启动

如果有人能提供一些关于在AWS-EB上部署Tornado应用程序的步骤,或者我应该如何开始对此进行故障排除,那就太好了。 请让我知道,如果我需要提供任何更多的细节

谢谢

更新 在注意到httpd错误日志文件、AWS文档和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()
其他链接:

我认为您的问题与以下事实有关:Elastic Beanstalk使用WSGI为Python Web应用提供服务,而Tornado的服务器不符合WSGI。在通过WSGI提供应用程序之前,您可能希望尝试在中包装应用程序


除非您依赖Tornado的异步功能,否则这应该可以正常工作,因为WSGI是严格同步的。

您可以使用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)

是的!谢谢你的回复!我注意到httpd错误日志中与WSGI相关的错误,并找到了与您的答案相匹配的解决方案。我还更新了问题中的工作服务器代码。您是否可以包括用于本地测试的docker文件,以及要上传到amazon的zip文件?如果你做了一些不同的事情,请解释。@denson这是一个老项目,所以我不记得所有的细节。我绝对没有让docker参与其中。很可能只是压缩了整个tornado项目代码并手动上传到UI上。感谢您的快速回复。我想我的用例是不同的,因为我试图通过conda安装所有东西,并将Tornado作为bokeh服务器运行。