【问题标题】:django 1.7rc3 and celery 3.13 - AppRegistryNotReadydjango 1.7rc3 和 celery 3.13 - AppRegistryNotReady
【发布时间】:2014-08-25 20:29:47
【问题描述】:

这对我不起作用

$> cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=精确
DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"

django 1.7rc3
芹菜 3.1.13
蟒蛇2.7

我尝试运行

celery worker -A <project_name>

我明白了

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

runserver 命令运行良好,所以我认为它与我的设置无关?

python manage.py runserver 0.0.0.0:8080

我已经仔细检查了 celery.py 并确认它具有以下行的正确值:

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')

还有什么我应该做的吗?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    Django 1.7 现在需要对 standalone scripts 进行不同的初始化。在manage.py 上下文之外运行时,您现在需要包括:

    import django
    django.setup()
    

    尝试在脚本中的 app = Celery('proj') 之前添加它。

    【讨论】:

    • 嗨,如果你看到这个问题:github.com/celery/celery/issues/2126 你会注意到 celery 开发人员明确表示不要在你的 celery.py 中调用它
    • @w--,是的,但它似乎对人们有用,而 celery 开发人员并没有充分解释为什么不在 celery.py 中调用它,或者应该做什么。
    【解决方案2】:

    我发现这失败的原因是因为我在我的一个任务中有这个。py

    CURRENT_DOMAIN = Site.objects.get_current().domain
    

    我暂时不考虑这个

    CURRENT_DOMAIN = lambda: Site.objects.get_current().domain
    

    目前正在等待 github 上是否有人愿意提供更好的建议。 https://github.com/celery/celery/issues/2227

    如果我得到一个会更新。如果不是,则可能只是执行一个辅助函数,该函数会延迟返回我想要的值。

    更新
    在 celery 作者的建议下,我重构了我的代码,所以我不在模块级别进行调用。
    他还通过确保在导入任务模块之前调用 django.setup() 来解决此问题
    https://github.com/celery/celery/issues/2227

    【讨论】:

      【解决方案3】:

      我看到了同样的问题,但只有:

      CELERYBEAT_SCHEDULER='djcelery.schedulers.DatabaseScheduler'
      

      你启用了吗?如果我使用默认的 celery 调度程序运行它,它可以正常加载。但无法使用 Django 调度程序加载它。

      【讨论】:

      • 使用最新版本的 celery,我认为你不应该再使用 djcelery。我将 celerybeat 作为守护进程运行,我的 settings.py 中唯一的配置是 CELERYBEAT_SCHEDULE = { }。因为我还没有定义它,所以我假设我使用的是默认值。
      • 是的,我只是喜欢在 dj admin 中创建和管理工作的能力。我猜是时候学习另一种方法了:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2012-10-06
      • 2019-11-15
      • 2011-07-18
      • 2011-07-17
      • 2015-05-01
      • 2017-10-24
      相关资源
      最近更新 更多