2011-01-24 31 views
5

के लिए संदेश कतार के रूप में मोंगोडीबी का उपयोग करके मैं सेलोरी (एक Django ऐप में) संदेश कतार के रूप में MongoDB का उपयोग करने की कोशिश कर रहा हूं। सेलेरी (2.2.0rc2) का वर्तमान विकास संस्करण आपको ऐसा करने देता है, लेकिन मुझे लगता है कि कोई भी श्रमिक मेरे द्वारा बनाए गए कार्यों को लेने के लिए प्रतीत नहीं होता है।सेलेरी

संस्करण: अजवाइन v2.2.0rc3
MongoDB 1.6.5
pymongo 1.9
Django-अजवाइन 2.2.0rc2

अपनी सेटिंग्स में, मैं है:

CELERY_RESULT_BACKEND = "mongodb" 
CELERY_MONGODB_BACKEND_SETTINGS = { 
    # Shouldn't need these - defaults are correct. 
    "host": "localhost", 
    "port": 27017, 
    "database": "celery", 
    "taskmeta_collection": "messages", 
} 

BROKER_BACKEND = 'mongodb' 
BROKER_HOST = "localhost" 
BROKER_PORT = 27017 
BROKER_USER = "" 
BROKER_PASSWORD = "" 
BROKER_VHOST = "" 

import djcelery 
djcelery.setup_loader() 

मैं हमने निम्न परीक्षण test.py फ़ाइल बनाई है:

from celery.decorators import task 

@task() 
def add(x, y): 
    return x + y 

अगर मैं पृष्ठभूमि में celeryd आग लगाना, यह सामान्य रूप से शुरू होता प्रतीत होता है। मैं फिर एक पायथन खोल खोलता हूं और निम्न चलाता हूं:

>>> from myapp.tasks import add 
>>> result = add.delay(5,5) 
>>> result 
<AsyncResult: 7174368d-288b-4abe-a6d7-aeba987fa886> 
>>> result.ready() 
False 

समस्या यह है कि कोई भी कर्मचारी कभी भी कार्य नहीं उठाता है। क्या मुझे एक सेटिंग या कुछ याद आ रही है? मैं संदेश कतार में अजवाइन कैसे इंगित करूं?

+0

इंस्टॉल किए गए एप्लिकेशन में एप्लिकेशन है? कुछ भी अगर इसके लॉग में अजवाइन लौट रहा है? एक आम कारण है कि .ready() गलत हो जाएगा जब यह वास्तव में नहीं होना चाहिए क्योंकि कार्यों को पहचाना नहीं गया है, सेलेरी कुछ ऐसा कहेंगे "अज्ञात कार्य अनदेखा: ...." – Bartek

+0

क्या आपने कभी यह काम किया है? मुझे एक ही समस्या है – Nathan

+0

दुर्भाग्यवश, मैंने नहीं किया। – Joe

उत्तर

0

याद रखें कि कोम्बू केवल mongo 1.3+ के साथ काम करता है क्योंकि इसे कार्यक्षमता खोजने और संशोधित करने की आवश्यकता होती है। यदि आप उबंटू पर हैं तो भंडार में अंतिम संस्करण 1.2 है, काम नहीं करता है।

शायद तुम भी BROKER_VHOST = "dbname" सेट

रखें मुझे पोस्ट अगर यह

0

अपनी सेटिंग्स में जोड़ने के लिए रखें, अन्यथा कार्यकर्ताओं काम नहीं मिल रहा है और होगा काम करता है के लिए है चुपचाप विफल

CELERY_IMPORTS = ("namespace",) 
0

मुझे एक ही समस्या थी, लेकिन जब मैंने अजवाइन 2.3.3 में अपग्रेड किया तो सबकुछ एक आकर्षण की तरह काम करता था।

2

हमारे पास यही समस्या थी। जबकि डॉक्टर कहते हैं कि

import djcelery 
djcelery.setup_loader() 

पर कॉल करके सभी कार्यों को सेलेरी में पंजीकृत किया जाना चाहिए, यह ठीक से काम नहीं कर रहा था। इसलिए, हमने अभी भी

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

सेटिंग.py में सेटिंग का उपयोग किया था। साथ ही, सुनिश्चित करें कि आप सेलेरी को पुनरारंभ करते हैं यदि आप कोई नया कार्य जोड़ते हैं क्योंकि सेलेरी को पहले शुरू होने पर कार्यों को पंजीकृत करना होता है।

Django, Celerybeat and Celery with MongoDB as the Broker

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