0

我在 Dotcloud 上部署了一个 Web 应用程序,其中每个页面上的数据计算起来可能非常昂贵(很多秒)。我想通过返回缓存信息然后用一堆导致完整计算发生的 AJAX 请求访问服务器来尽可能快地加载初始页面。但我不希望这些 AJAX 请求阻塞其他用户的初始页面加载,所以我希望他们单独排队。

我认为应该为两个服务器使用相同的 Django 应用程序,特别是因为数据模型是共享的。所以dotcloud.yml文件有点像:

www:
  type: python
www-ajax:
  type: python
(...)

但是如何将不同的 URL 路由到每类实例?另外,我已经阅读了有关 Gunicorn 的长请求。这些 AJAX 请求很长,但它们不依赖于外部资源,除了数据库。这是 Gunicorn 的情况吗?如果是这样,是否有一种简单的方法可以将其集成到配置中?

4

1 回答 1

1

如果您按照您在示例dotcloud.yml文件中描述的方式进行设置,您将拥有两个不同的服务,具有两个不同的 url。因此,如果您想向 ajax 服务发送内容,则使用 ajax url,如果您想要常规的,则可以使用 www url。

要运行 gunicorn,您可以使用 python-worker 用户并为 python worker 分配一个 http 端口,然后在 http 端口上列出 gunicorn。需要注意的是,python-worker 前面没有像 python 服务那样的 nginx,所以 gunicorn 需要直接监听流量。

所以把它放在一起看起来像这样。

www:
  type: python
  approot: myapp
www-ajax:
  type: python-worker
  approot: myapp
  ports:
    www: tcp
  process: gunicorn -b 0.0.0.0:$PORT_WWW yourapp:app

您的进程字符串很可能看起来不同,但您得到了图片。

你也不需要approot,只是把它放在那里作为例子。

于 2013-04-04T18:16:19.593 回答