我有两个基本上运行相同代码库的站点,设置上只有轻微差异。每个站点都在Django中构建,并集成了WordPress博客。
每个站点都需要从WordPress导入博客文章并将它们存储在Django数据库中。当用户发布帖子时,WordPress会在Django端点击一个webhook URL,从而启动一个Celery任务,该任务抓取帖子的JSON版本并导入它。
我最初的想法是,每个网站都可以运行自己的manage.py celeryd
实例,每个网站都有自己的virtualenv
,这两个网站会彼此不同。每个都使用单独的upstart脚本进行守护。
但看起来他们正在某种程度上相撞。我可以一次成功运行一个,但如果两个都运行,一个实例将不会接收任务,或者任务将使用错误的设置运行(在这种情况下,每个都有WORDPRESS_BLOG_URL
设置。
我正在使用Redis队列,如果这有所不同。我在这里做错了什么?
答案 0 :(得分:2)
您是否指定了芹菜应该使用的默认队列的名称?如果您尚未设置CELERY_DEFAULT_QUEUE,则两个站点将使用相同的队列并获取彼此的消息。您需要为每个站点将此设置设置为不同的值,以使邮件保持独立。
修改强>
你没错,CELERY_DEFAULT_QUEUE仅适用于像RabbitMQ这样的后端。我认为您需要为每个网站设置不同的数据库编号,在broker url的末尾使用不同的编号。
答案 1 :(得分:0)
如果您正在使用django-celery,那么请确保您没有在virtualenvs之外运行的芹菜实例。然后像你一样使用manage.py celeryd
启动virtualenvs中的celery实例。我建议您设置supervisord以跟踪您的实例。