【问题标题】:Running Tornado in apache在 apache 中运行 Tornado
【发布时间】:2014-02-18 04:08:48
【问题描述】:

我的最终目标是使用 python 实现一个 WebSocket 服务器。

我通过在我的 python 脚本中导入 tornado 来实现这一点。我还在 apache 中安装了 mod_wsgi,their script 输出 Hello World!,所以 WSGI 似乎工作正常。据我所知,Tornado 也运行良好。

当我使用tornado's wsgi "Hello, world" script时出现问题:

import tornado.web
import tornado.wsgi
import wsgiref.simple_server

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

if __name__ == "__main__":
    application = tornado.wsgi.WSGIApplication([
        (r"/", MainHandler),
    ])
    server = wsgiref.simple_server.make_server('', 8888, application)
    server.serve_forever()

首先,我收到 500 错误,日志告诉我 WSGI 找不到“应用程序”。

所以我删除if __name__ == "__main__",页面无限加载。

我认为这是因为 server.serve_forever(),所以我将其删除以尝试查看 Hello, world

但现在我只收到404: Not Found。这不是我的 apache 404 页面,我知道服务器可以找到我的主 .wsgi 文件...

【问题讨论】:

    标签: python websocket tornado mod-wsgi


    【解决方案1】:

    要在 apache 中使用 tornado,请将 mod-wsgi 插件添加到 apache。

    apt-get install libapache2-mod-wsgi
    

    写一个tornado wsgi服务器 .wsgi 注意:不要使用__name__

    配置 apache.conf 以运行您的服务器。配置使用 this mod-wsgi 指南

    【讨论】:

      【解决方案2】:

      您不能将 websockets 与 Tornado 的 WSGIApplication 一起使用。要使用 Tornado 的 websocket 支持,您必须使用 Tornado 的 HTTPServer,而不是 apache。

      【讨论】:

        【解决方案3】:

        WSGIApplication 处理程序是相对于网络服务器根的。如果您的应用程序 url 是 /myapp,那么您的“应用程序”必须如下所示:

        application = tornado.wsgi.WSGIApplication([
            (r"/myapp", MainHandler),
            (r"/myapp/login/etc", LoginEtcHandler),
        ])
        

        哦,看起来文档很糟糕(像往常一样),__name__ 在 apache 下运行时看起来像这样:_mod_wsgi_8a447ce1677c71c08069303864e1283e


        所以!正确的“Hello World”python 脚本如下所示:

        /var/www/wsgi-scripts/myapp.wsgi:

        import tornado.web
        import tornado.wsgi
        import wsgiref.simple_server
        
        class MainHandler(tornado.web.RequestHandler):
            def get(self):
                 self.write('Hello World')
        
        application = tornado.wsgi.WSGIApplication([
            (r"/myapp", MainHandler),
        ])
        

        在 apache 配置中(不是 .htaccess):

        WSGIScriptAlias /myapp /var/www/wsgi-scripts/myapp.wsgi

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-03
          • 1970-01-01
          • 2014-03-31
          • 1970-01-01
          • 2017-10-27
          • 2012-12-31
          相关资源
          最近更新 更多