使用django芹菜击败本地我得到错误'PeriodicTask'对象没有属性'_default_manager'

时间:2016-09-23 15:29:04

标签: python django heroku redis scheduled-tasks

使用django芹菜击败本地我得到错误'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'

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

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

我愿意尝试这个,但我不知道在哪里放这个,我不想引起一个更大的不可预见的问题,这可能会导致。我有什么选择?我应该手动进入我的远程应用程序并在每次运行后重置它吗?这是不可行的,并且无法实现任务自动化的目的。

1 个答案:

答案 0 :(得分:3)

我明白了。在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)
相关问题