Python 在AWS Elastic Beanstalk上部署Tornado应用程序
我有一个用Python 2.7/Tornado编写的服务器,我正在尝试将其部署到AWS上。 我遇到了AWS Elastic Beanstalk,它看起来是部署代码的一种非常方便的方法 我经历了这些,并能够部署Flask示例应用程序。 但是,我不知道如何部署下面这样的测试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
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服务器运行。