2012-02-07 76 views
0

我有两个网站基本上运行相同的代码库,只有轻微的设置差异。每个站点都是在Django中构建的,集成了一个WordPress博客。如何确保Celery任务以正确的设置运行?

每个站点需要从WordPress导入博客文章并将它们存储在Django数据库中。当用户发布帖子时,WordPress会在Django端点击一个webhook网址,这会启动抓取该帖子的JSON版本并导入它的Celery任务。

我最初的想法是,每个网站都可以运行自己的manage.py celeryd实例,每个实例都在自己的virtualenv中,并且这两个网站将彼此保持距离。每个人都用一个单独的新贵脚本进行守护。

但它看起来像是以某种方式碰撞。我可以成功运行一个,但是如果两者都运行,一个实例将不会接收任务,或者任务将以错误的设置运行(在这种情况下,每个设置都有一个WORDPRESS_BLOG_URL设置)。

我正在使用Redis队列,如果这有所作为。我在这里做错了什么?

回答

2

您是否指定了芹菜应该使用的默认队列的名称?如果您尚未设置CELERY_DEFAULT_QUEUE,则这两个站点将使用相同的队列并获取对方的消息。您需要将此设置设置为每个站点的不同值以保持消息的分离。

编辑

你说得对,CELERY_DEFAULT_QUEUE只是像RabbitMQ的后端。我想你需要为每个站点设置不同的数据库编号,在broker url的末尾使用不同的编号。

+0

这将与Redis一起工作吗?文档使它听起来像这只是AMPQ。在将CELERY_DEFAULT_QUEUE添加到命令行中的设置和-Q(带队列名称)之后,我仍然看到同样的问题。 – 2012-02-07 19:11:47

+0

我编辑了我的答案。你是对的,那个设置只适用于AMPQ经纪人。 – 2012-02-07 20:47:01

+0

我认为这是诀窍。我假定'CELERY_REDIS_ *'设置也设置了任务路由,但看起来像'BROKER_UR'L需要独立于结果存储设置。 – 2012-02-08 19:23:57

0

如果您使用的是django-celery,那么请确保您没有在virtualenvs之外运行的芹菜实例。然后像你一样使用manage.py celeryd在你的virtualenvs中启动芹菜实例。我建议设置supervisord来跟踪您的实例。

相关问题