2016-05-13 66 views
14

考慮這個bash命令:如何在沒有-A選項的情況下運行芹菜狀態/花?

$ export DJANGO_SETTINGS_MODULE=web.settings 
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 
Error: No nodes replied within time constraint. 
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app 
[email protected]: OK 

爲什麼我需要-A選項?據我所知,芹菜應該能夠檢測到redis上的必要元數據。

同樣,如果我運行celery flower -b <redis url>它表明它已成功連接到redis,但不顯示任何真正的工作人員/任務/隊列,並顯示幾條消息,如'stats' inspect method failed。再次,加入-A會導致它工作。

我想在不包含任何代碼或其依賴關係的最小獨立Docker容器中運行flower。 this one等幾個回購提供這種東西。那我該怎麼做?鏈接回購提供了許多選項,但沒有辦法指定-A選項,這表明它不是必需的。

我是芹菜的初學者,所以我可能會錯過一些愚蠢的東西。我應該做些什麼?

scaffold.tasks.celery_app模塊只是看起來是這樣的:

from celery import Celery 
from django.conf import settings 

app = Celery() 
app.config_from_object(settings) 

而這些都是Django的設置,包括芹菜:

{'BROKER_HEARTBEAT': 0, 
'BROKER_TRANSPORT_OPTIONS': {'fanout_patterns': True, 
           'fanout_prefix': True, 
           'visibility_timeout': 172800}, 
'BROKER_URL': 'redis://redis.businessoptics.dev:6379/1', 
'CELERYBEAT_SCHEDULE': {'journey-heartbeat': {'args':(), 
               'schedule': <crontab: * * * * * (m/h/d/dM/MY)>, 
               'task': 'kms.data.journey.tasks.heartbeat'}}, 
'CELERYD_CONCURRENCY': 1, 
'CELERYD_HIJACK_ROOT_LOGGER': False, 
'CELERYD_LOG_COLOR': False, 
'CELERYD_MAX_TASKS_PER_CHILD': 1, 
'CELERYD_PREFETCH_MULTIPLIER': 1, 
'CELERY_ACCEPT_CONTENT': ['pickle'], 
'CELERY_ACKS_LATE': True, 
'CELERY_DEFAULT_EXCHANGE': 'default', 
'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct', 
'CELERY_DEFAULT_QUEUE': 'default', 
'CELERY_DEFAULT_ROUTING_KEY': 'default', 
'CELERY_IGNORE_RESULT': False, 
'CELERY_IMPORTS': ['kms.knowledge.query.tasks2', 
        # names of several more modules... 
        ], 
'CELERY_QUEUES': [<unbound Queue tablestore -> <unbound Exchange default(direct)> -> kms.data.table_store.tasks.#>, 
        # several more similar-looking Queues... 
        <unbound Queue default -> <unbound Exchange default(direct)> -> default>], 
'CELERY_REDIRECT_STDOUTS': False, 
'CELERY_RESULT_BACKEND': 'database', 
'CELERY_RESULT_DBURI': 'mysql://businessoptics:[email protected]:3306/product', 
'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': True, 
'CELERY_ROUTES': ['scaffold.tasks.routers.TaskNameRouter'], 
'CELERY_SEND_EVENTS': True, 
'CELERY_SEND_TASK_ERROR_EMAILS': False, 
'CELERY_SEND_TASK_SENT_EVENT': True, 
'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': True, 
'CELERY_TASKNAME_ROUTES': [('tablestore', 'kms.data.table_store.tasks.#'), 
          # bunch of routes... 
          ], 
'CELERY_TASK_RESULT_EXPIRES': None, 
'CELERY_TIMEZONE': 'UTC', 
'CELERY_TRACK_STARTED': True, 
'CELERY_WORKER_DIRECT': True 
} 

下面是相關的版本:

celery==3.1.19 
Django==1.8 
django-celery==3.1.0 
redis==2.10.3 
+0

對我'flower --port = 5555 --broker ='redis:// ...''不經過'-A' – ahmed

回答

5

的-A選項是通過相關配置i傳遞芹菜實例的選項包括包含任務的軟件包。

要使用所有的功能花需要像工人一樣配置,這意味着要知道你的芹菜任務在哪裏並且知道它們。

添加到您的碼頭工人容器所需的蟒蛇的lib不應該是硬的,例如,你可以添加到this file配置線路按以下方式CELERY_IMPORTS:

CELERY_IMPORTS = os.getenv('CELERY_IMPORTS ', 'default.package') 

UPDATE

正如@asksol,芹菜的創造者,在評論中指出這裏有更詳細的解釋爲什麼你需要-A選項:

花也是一個消息消費者,因此將有助於恢復未消息的消息。由於您定義了自定義可見性,因此未啓動花卉配置意味着它將使用默認的可見性超時,因此會比您的工作人員更快地重新傳遞未更新的消息。總是使用-A,以使工作者,花卉和客戶端配置同步

+0

你能否解釋爲什麼ahmed對我的問題發表評論並不需要通過該選項? –

+0

你應該問他不是我。 –

+0

我原來的問題歸結爲「他是怎麼做到的」,所以如果他知道我認爲他會告訴我。我的觀點是很明顯,選項並不總是需要的,你的回答告訴我它是這樣的。 –

相關問題