在AWS Elastic Beanstalk

时间:2017-03-11 18:04:36

标签: python amazon-web-services elastic-beanstalk tornado amazon-elastic-beanstalk

我有一个用 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()

其他链接: Tornado WSGI Documentation

2 个答案:

答案 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)

http://www.tornadoweb.org/en/stable/guide/running.html