芹菜自动发现任务不适用于所有Django 1.7应用程序

2024-06-02 04:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django 1.7项目和芹菜3.1。我的Django项目中的所有应用程序都使用新的AppConfig。问题是并非所有的任务都是通过autodiscover_tasks找到的:

app.autodiscover_tasks(settings.INSTALLED_APPS)

如果我使用这样的自动发现任务,它将起作用:

app.autodiscover_tasks(settings.INSTALLED_APPS + ('apps.core','apps.sales'))

网站中定义的任务已找到,但core和sales中的任务未找到。它们的布局都与apps.pytasks.py相同。

项目文件夹结构为:

apps
  core
  apps.py
  tasks.py
dashboard
  apps.py
sales
  apps.py
  tasks.py
websites
  apps.py
  tasks.py

类定义如下:

class WebsitesConfig(AppConfig):
    name = 'apps.websites'
    verbose_name = 'Websites'

class SalesConfig(AppConfig):
    name = 'apps.sales'
    verbose_name = 'Sales'

Tags: appsinstalled项目djangonamepycoreapp
3条回答

我遇到这个问题是因为虚拟环境配置错误。

如果安装的应用程序在运行芹菜的虚拟环境中缺少依赖项,则不会自动发现安装的应用程序的任务。当我从在同一台机器上运行web服务器和芹菜转向分布式解决方案时,我突然想到了这一点。错误的生成导致不同节点上的环境文件不同。

我添加了缺少的依赖项,然后重新启动芹菜服务。

这在许多芹菜问题中都有讨论,比如#2596#2597

如果您使用的是芹菜3.x,修复方法是使用:

from django.apps import apps
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])

#3341所述,如果您使用的是芹菜4.x(即将发布),则可以使用:

app.autodiscover_tasks()

我必须将此添加到定义芹菜应用程序的模块中:

from __future__ import absolute_import

相关问题 更多 >