我使用Django的芹菜運行中涉及到的聯繫人/電子郵件解析背景兩個任務。Django和芹菜:任務不導入
結構是:
project
/api
/core
tasks.py
settings.py
settings.py文件包含:
BROKER_URL = 'django://'
BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
#celery
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
sys.path.append(os.path.dirname(os.path.basename(__file__)))
CELERY_IMPORTS = ['project.core.tasks']
import djcelery
djcelery.setup_loader()
# ....
INSTALLED_APPS = (
#...
'kombu.transport.django',
'djcelery',
)
tasks.py包含:
from celery.task import Task
from celery.registry import tasks
class ParseEmails(Task):
#...
class ImportGMailContactsFromGoogleAccount(Task):
#...
tasks.register(ParseEmails)
tasks.register(ImportGMailContactsFromGoogleAccount)
此外,在wsgi.py添加
os.environ["CELERY_LOADER"] = "django"
現在,我有這個應用程序託管在WebFactional服務器上。在我的本地這個運行良好,但WebFaction服務器,其中Django應用程序部署在Apache服務器上,我得到:
2013-01-23 17:25:00,067: ERROR/MainProcess] Task project.core.tasks.ImportGMailContactsFromGoogleAccount[df84e03f-9d22-44ed-a305-24c20407f87c] raised exception: Task of kind 'project.core.tasks.ImportGMailContactsFromGoogleAccount' is not registered, please make sure it's imported.
但任務顯示爲註冊。如果我運行
python2.7 manage.py celeryd -l info
我獲得:
-------------- [email protected] v3.0.13 (Chiastic Slide)
---- **** -----
--- * *** * -- [Configuration]
-- * - **** --- . broker: django://localhost//
- ** ---------- . app: default:0x1e55350 (djcelery.loaders.DjangoLoader)
- ** ---------- . concurrency: 8 (processes)
- ** ---------- . events: OFF (enable -E to monitor this worker)
- ** ----------
- *** --- * --- [Queues]
-- ******* ---- . celery: exchange:celery(direct) binding:celery
--- ***** -----
[Tasks]
. project.core.tasks.ImportGMailContactsFromGoogleAccount
. project.core.tasks.ParseEmails
我認爲這可能是一個相對導入錯誤,但我認爲在settings.py的變化和wsgi.py會阻止。
我在想WebFactional支持的多個Python版本可能需要這樣做,但是我安裝了Python 2.7的所有庫,並且我也運行了Django for 2.7,所以應該沒有問題。
在本地主機上運行使用celeryd -l信息的任務列表中還顯示了,當我啓動工作,但是當我調用任務就不會輸出錯誤 - 它運行完美。
謝謝
這是奇怪的,你提到的,我已經在使得它的工作是準確地從任務類更改爲裝飾功能也同時在做。然而這隻有在某些方面運行芹菜時纔有效。使用「celery -worker」工作,但例如「celery-multi start 1」不會在manage.py目錄中使用「manage.py celeryd_multi start 1」,從而產生與使用不同的結果。我想我真正能做到的唯一方法就是深入調查問題。 –