【问题标题】:Django-celery on multiple computers多台计算机上的 Django-celery
【发布时间】:2012-05-19 13:17:33
【问题描述】:

django-celery 在我的开发机器上工作,我得到了我想做的一切。更具体地说,该应用程序接受照片网址,然后将其转换为同一台机器下载的任务。

现在我想做的是把 django 代码放在 heroku 上,把 celery tasks 放在办公室里的专用电脑上。

我不知道下一步是什么。如何告诉 django 应用程序连接到办公室计算机?设置办公室计算机以接受来自 django 应用程序的任务的过程是什么?如何将本地计算机登录凭据提供给 django 应用,以便它可以连接到数据库以更新模型?

理想情况下,我希望在我的 setting.py 文件中添加这样的内容:

remote_worker = '123.2.4.23:1234'

在办公室电脑上

tasks = 'photos/tasks.py'
remote_app = 'herokuapp123.com/myapp'
username = 'me'
password = 'pw'

我知道有很多问题。任何帮助或指点将不胜感激!

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    这在很大程度上取决于您用于 celery 的 AMQP 后端。如果您使用的是默认 (RabbitMQ),则需要执行以下操作之一:

    1. 在heroku服务器上安装RabbitMQ,通过防火墙将其端口暴露给你的业务IP,并配置你的办公电脑连接到它
    2. 在您的企业计算机上本地安装 RabbitMQ 并在 Heroku 上配置 celery 以连接到它
    3. 在两侧安装 RabbitMQ 并桥接它们。

    或者,您可以使用 VPN 解决方案将 heroku 服务器集成到您自己的业务网络中,并让它们直接相互通信(因为毕竟您可能不想通过 interwebz 传输 AMQP 数据包)。

    场景 1 可能是最容易设置的,因为 Heroku 已经为您提供了这样的插件基础设施。场景 2 可能不是您想要的,因为您必须为此在业务防火墙上打一个洞。场景 1 和 2 都将存在延迟和可靠性问题,因为通过 Internet 路由 AMQP 流量将不方便或不可靠。您将丢弃消息,并且 celery 将继续重试,直到它成功或达到最大失败次数。但是,AMQP 旨在处理网络问题,如果这很关键,它们可能会无意中影响您的性能。但是,在这种情况下,您应该重新考虑将 celery workers 放在商务桌面上。

    就可靠性而言,场景 C 可能是最好的,但也更难设置。根据您的需要进行选择。

    【讨论】:

    • 我最终在 heroku 端安装了 Kombu。然后我在办公室计算机上拥有与 heroku 服务器上相同的 src 代码树。办公室计算机的 settings.py 文件使用 heroku 服务器的数据库,以便它可以更新模型。它有效,但我认为更新任务中的模型(我在下载照片时更新模型)打破了芹菜的“最佳实践”。
    猜你喜欢
    • 2015-07-12
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多