在 Heroku 上部署 Django\Tornado
Posted
技术标签:
【中文标题】在 Heroku 上部署 Django\\Tornado【英文标题】:Deploy Django\Tornado on Heroku在 Heroku 上部署 Django\Tornado 【发布时间】:2014-09-12 14:53:29 【问题描述】:我想在 Heroku 上部署一些应用程序,它是带有 Tornado(Tornadio2) 服务器的 Django,用于实现带有 socket.io 协议的 WebSockets。
所以,现在它在我的 VPS 服务器上运行良好,
我使用 nginx 和 location
部分来路由 Django 或 Tornado 的请求。
Nginx 配置如下:
location /socket.io
# Tornado app
proxy_pass http://localhost:8088;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
...
location /
# Django app
...
那么,在 Heroku 上路由 Django/Tornado 请求的简单方法是什么?
看起来有必要使用自定义 Buildpack 来安装 Nginx?
或者可能有在 Django 中实现异步 socket.io 以避免路由请求的好方法?
【问题讨论】:
【参考方案1】:让我从你的最后一个问题开始:
或者可能有在 Django 中实现异步 socket.io 以避免路由请求的好方法?
Django 本质上是一个用于将 HTTP 请求处理为适当的 HTTP 响应的库。它不提供像 uWSGI、Apache mod_wsgi、Tornado、Flask、gunicorn 等这样的执行上下文。所以你不能真正使用 django 来服务 web 套接字; django 周围总会有一个执行上下文。
当您将 django 站点部署到 Heroku 时,它通常会使用 gunicorn 作为执行环境。性能方面,这不是很酷:performance of python servers。因为gunicorn的性能差和阻塞I/O有关,所以有人在gunicorn前面安装了nginx作为非阻塞层。这导致了nginx buildpack。
我认为这不符合您的需求。 Nginx 是一个很棒的 Web 服务器,但不包含 python 执行环境。所以你最终会在你的堆栈中引入第三台服务器:
用于 HTTP 的 nginx django 的独角兽 用于 websocket 的服务器 #3我最好的建议是离开 gunicorn 和 nginx,将所有东西放在 Tornado 中:web 服务器、django 的 WSGI 执行上下文、websockets 的异步上下文。
此链接显示如何run Tornado on Heroku。下一个链接显示如何run django in Tornado。
【讨论】:
以上是关于在 Heroku 上部署 Django\Tornado的主要内容,如果未能解决你的问题,请参考以下文章