簡體   English   中英

我在本地使用django celery beat我得到了錯誤“ PeriodicTask”對象沒有屬性“ _default_manager”

[英]using django celery beat locally I get error 'PeriodicTask' object has no attribute '_default_manager'

在本地使用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 post說他通過這樣做解決了

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

我願意嘗試一下,但是我不知道該放在哪里,也不想引起更大的不可預見的問題。 我有什么選擇? 我應該手動進入遠程應用程序並在每次運行后將其重置嗎? 那是行不通的,並且破壞了任務自動化的目的。

我想到了。 在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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM