2016-05-13 5 views
14

इस बैश सत्र पर विचार करें:मैं एए विकल्प के बिना अजवाइन की स्थिति/फूल कैसे चला सकता हूं?

$ 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 विकल्प की जरूरत क्यों करते हैं? जहां तक ​​मैं कह सकता हूं कि अजवाइन लाल रंग पर आवश्यक मेटाडेटा का पता लगाने में सक्षम होना चाहिए।

इसी तरह यह पता चलता है कि अगर मैं celery flower -b <redis url> चलाने कि इसे सफलतापूर्वक Redis को जोड़ता है, लेकिन किसी भी असली कार्यकर्ताओं/कार्य/कतारों प्रदर्शित नहीं करता है और 'stats' inspect method failed जैसे कई संदेश दिखाता है। फिर, -A जोड़ना इसे काम करने का कारण बनता है।

मैं एक न्यूनतम स्टैंडअलोन डॉकर कंटेनर में फूल चलाने के लिए चाहता हूं जिसमें मेरा कोई कोड या इसकी निर्भरता न हो। 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

मेरे लिए 'फूल --पोर्ट = 5555 - ब्रोकर =' रेडिस: // ... '' पास किए बिना काम '-ए' – ahmed

उत्तर

5

-ए विकल्प वह है जो संबंधित कॉन्फ़िगरेशन के साथ सेलेरी इंस्टेंस पास करता है I अपने कार्यों वाले पैकेज को छोड़कर।

सभी सुविधाओं का उपयोग करने के लिए फूलों को एक कार्यकर्ता की तरह कॉन्फ़िगर करने की आवश्यकता है, इसका मतलब यह है कि पैकेज को जानना जहां आपका अजवाइन कार्य है और उन्हें जानना।

अपने डोकर कंटेनर में जोड़े जरूरत अजगर lib कि मुश्किल नहीं होना चाहिए, उदाहरण के लिए आप this file विन्यास लाइन निम्नलिखित तरीके से CELERY_IMPORTS को जोड़ सकते हैं:

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

अद्यतन

@asksol, अजवाइन निर्माता के रूप में, यहां टिप्पणियों में बताया गया है कि आपको एक विकल्प की आवश्यकता क्यों है: ए 12 विकल्प:

फूल भी एक संदेश उपभोक्ता है और इसलिए अनचाहे संदेशों को पुनर्प्राप्त करने में मदद करेगा। चूंकि आपके पास एक कस्टम दृश्यता परिभाषित है, फूल को असुरक्षित शुरू करने का अर्थ है कि यह डिफ़ॉल्ट दृश्यता टाइमआउट का उपयोग करेगा और इस प्रकार आपके कर्मचारियों की तुलना में अनचाहे संदेशों को तेज़ी से फिर से वितरित कर देगा। हमेशा उपयोग करें- ए ताकि कार्यकर्ता, फूल और क्लाइंट कॉन्फ़िगरेशन सिंक हो सके

+0

क्या आप समझा सकते हैं कि मेरे प्रश्न पर टिप्पणी करने वाले अहमद को विकल्प पास करने की आवश्यकता नहीं है? –

+0

आपको उससे मुझसे नहीं पूछना चाहिए। –

+0

मेरा मूल प्रश्न "वह ऐसा कैसे करता है" तक उबालता है, इसलिए यदि उसे पता था कि मुझे लगता है कि वह मुझे बताएगा। मेरा मुद्दा यह है कि यह स्पष्ट है कि विकल्प हमेशा की आवश्यकता नहीं है और आपका जवाब मुझे बता रहा है कि यह है। –

संबंधित मुद्दे