2012-05-10 48 views
1

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

现在我想要做的就是将django代码放在heroku上,将芹菜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' 

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

回答

1

这很大程度上取决于您用于芹菜的AMQP后端。如果您使用的是默认(RabbitMQ的),你需要做以下之一:

  1. Heroku的服务器上安装RabbitMQ的,通过防火墙公开的端口连接到企业IP和配置您的办公室的电脑连接到它
  2. 在您的商用电脑上本地安装RabbitMQ并在Heroku上配置芹菜以连接到它
  3. 在两侧安装RabbitMQ并桥接它们。

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

情景1可能是最容易设置的,因为Heroku已经为您提供了插件基础结构。情景2可能不是您想要的,因为您必须在商业防火墙中为此打出一个漏洞。因为通过互联网路由AMQP流量不是方便或可靠的,所以情景1和2都会有延迟和可靠性问题。您将丢弃消息,芹菜将继续重试,直至成功或达到最大失败次数。然而,AMQP旨在处理网络问题,如果这是至关重要的,它们可能会无意中影响您的表现。但是在那种情况下,你应该重新考虑将芹菜工人放在商业桌面上。

情景C在可靠性方面可能是最好的,但也更难以建立。根据您的需求选择。

+0

我最终在heroku一侧安装了Kombu。然后,我在办公室计算机上使用与heroku服务器上相同的src代码树。办公室计算机的settings.py文件使用heroku服务器的数据库,以便它可以更新模型。它可以工作,但我认为更新任务中的模型(我下载照片后更新模型)虽然打破了芹菜的“最佳实践”。 – Alexis