在本地使用 django celery beat 我收到错误 'PeriodicTask' object has no attribute '_default_manager'
using django celery beat locally I get error 'PeriodicTask' object has no attribute '_default_manager'
在本地使用 django celery beat 我收到错误 'PeriodicTask' object has no attribute '_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 中心 post 说他通过这样做修复了它
Model = type(self.model)
obj = Model._default_manager.get(pk=self.model.pk)
我愿意尝试这个,但我不知道把它放在哪里,我不想造成更大的不可预见的问题,这可能会导致。我有哪些选择?我是否应该手动进入我的远程应用程序并在每次 运行s 后重置它?那是不可行的,并且违背了任务自动化的目的。
我明白了。在 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)
在本地使用 django celery beat 我收到错误 'PeriodicTask' object has no attribute '_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 中心 post 说他通过这样做修复了它
Model = type(self.model)
obj = Model._default_manager.get(pk=self.model.pk)
我愿意尝试这个,但我不知道把它放在哪里,我不想造成更大的不可预见的问题,这可能会导致。我有哪些选择?我是否应该手动进入我的远程应用程序并在每次 运行s 后重置它?那是不可行的,并且违背了任务自动化的目的。
我明白了。在 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)