【问题标题】:using django celery beat locally I get error 'PeriodicTask' object has no attribute '_default_manager'在本地使用 django celery beat 我收到错误“PeriodicTask”对象没有属性“_default_manager”
【发布时间】:2017-02-01 12:48:42
【问题描述】:

在本地使用 django celery beat 我收到错误“PeriodicTask”对象没有属性“_default_manager”。我正在使用 Django 1.10。当我安排任务时,它可以工作。但片刻之后,出现如下红色错误回溯

[2016-09-23 11:08:34,962: INFO/Beat] Writing entries...
[2016-09-23 11:08:34,965: INFO/Beat] Writing entries...
[2016-09-23 11:08:34,965: INFO/Beat] Writing entries...
[2016-09-23 11:08:34,966: ERROR/Beat] Process Beat
Traceback (most recent call last):
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/billiard/process.py", line 292, in _bootstrap
    self.run()
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/beat.py", line 553, in run
    self.service.start(embedded_process=True)
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/beat.py", line 486, in start
    self.scheduler._do_sync()
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/beat.py", line 276, in _do_sync
    self.sync()
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/djcelery/schedulers.py", line 209, in sync
    self.schedule[name].save()
  File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/djcelery/schedulers.py", line 98, in save
    obj = self.model._default_manager.get(pk=self.model.pk)
AttributeError: 'PeriodicTask' object has no attribute '_default_manager'

发生这种情况后,除非我“control+c”退出终端并重新启动,否则下一个计划将不会运行。我在 git hub 上看到这可能是因为我使用的是 django 1.10。我已经 git 将它推送到我的 heroku 服务器。我该如何解决这个问题? git hub 帖子说他通过这样做修复了它

Model = type(self.model)
obj = Model._default_manager.get(pk=self.model.pk)

我愿意尝试这个,但我不知道把它放在哪里,我不想造成更大的意外问题,这可能会导致。我有哪些选择?我是否应该手动进入我的远程应用程序并在每次运行后重置它?那是不可行的,并且违背了任务自动化的目的。

【问题讨论】:

    标签: python django heroku redis scheduled-tasks


    【解决方案1】:

    我想通了。在 schedulers.py 的第 98 行是

    obj = self.model._default_manager.get(pk=self.model.pk)
    

    所以我在上面加了一行

    Model = type(self.model)
    

    改变了

    obj = self.model._default_manager.get(pk=self.model.pk)
    

    obj = Model._default_manager.get(pk=self.model.pk)
    

    完成了,看起来像这样

    98  Model = type(self.model)
    99  obj = Model._default_manager.get(pk=self.model.pk)
    

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2016-04-23
      • 2017-02-02
      • 2022-01-20
      • 2021-07-30
      • 2021-08-01
      • 2021-05-28
      • 2017-06-11
      • 2020-08-21
      相关资源
      最近更新 更多