【发布时间】:2017-08-01 23:58:05
【问题描述】:
我有一个用 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 文件中包含 tornado==4.4.2 的条目。
我尝试添加一些日志语句以写入外部文件,但没有创建文件,这可能意味着应用程序甚至没有启动。
如果有人能提供一些在 AWS-EB 上部署 Tornado 应用程序的步骤,或者我应该如何开始对此进行故障排除,那就太好了。 如果我需要提供更多详细信息,请告诉我。
谢谢!
更新
在注意到 httpd error_log 文件、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()
【问题讨论】:
-
能否包含您用于本地测试的 docker 文件以及包含在 zip 中以上传到亚马逊的文件?如果你做了不同的事情,请解释一下。
-
@denson 这是一个旧的副项目,所以我不记得所有细节。我绝对没有 docker 参与其中。很可能它只是压缩整个 tornado 项目代码并在 UI 上手动上传。
-
感谢您的快速回复。我想我的用例有所不同,因为我试图通过 conda 安装所有内容并将 Tornado 作为散景服务器运行。
标签: python amazon-web-services amazon-elastic-beanstalk tornado