2013-07-03 10 views
8

एसिंक्रोनिक ईमेल भेजने की समस्या को हल करने में थोड़ा फंस गया। मैं बैलेंस के रूप में अजवाइन, और django डेटाबेस का उपयोग करना चाहता हूँ। चूंकि अब एकमात्र चीज मैं इस कतार प्रबंधन उपकरण का उपयोग करना चाहता हूं, ईमेल है, मैंने django-celery-email भी इंस्टॉल किया है।django-celery-email कार्य निष्पादित नहीं किया गया है

import djcelery 
djcelery.setup_loader() 

INSTALLED_APPS += ('kombu.transport.django', 
        'djcelery', 
        'djcelery_email') 

BROKER_URL = 'django://' 
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend' 

मैं ऐसे सेटिंग्स के साथ डिफ़ॉल्ट Django एसएमटीपी का उपयोग कर रहा:

EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = 'cs*****@gmail.com' 
EMAIL_HOST_PASSWORD = '*********' 
EMAIL_PORT = 587 

मैं दोनों के लिए विस्थापित चला

अनुदेश के बाद, मैं अपनी सेटिंग फाइल करने के लिए इस तरह के परिवर्तन करने के बाद djcelery और komby ऐप्स। और अब, डिफ़ॉल्ट django send_mail कोर विधि का उपयोग कर, ईमेल नहीं भेजा गया है।

यदि EMAIL_BACKEND विकल्प हटाएं, तो ईमेल भेजने का काम, लेकिन बहुत धीमी गति से। अगर गति के लिए नहीं, तो मैं इस प्रक्रिया को पहली जगह कतार में नहीं देखूंगा।

मैं डेटाबेस बैकएंड के रूप में MySQL डेटाबेस का उपयोग करता हूं, और यह त्रुटि लॉग फ़ाइल किसी कार्य को जोड़ने के दौरान कुछ भी नहीं दिखाती है, इसलिए मुझे लगता है कि वह हिस्सा ठीक है। ऐसा लगता है, मैंने कुछ बुनियादी स्थापना या कॉन्फ़िगरेशन भाग को याद किया है, जिसे आसानी से अनुभवी अजवाइन या djcelery उपयोगकर्ता द्वारा आसानी से देखा जा सकता है, लेकिन मेरे जैसे नौसिखिया याद कर सकते थे।

अद्यतन Django खोल काम के आसपास:

>>> from django.core.mail import send_mail 
>>> from django.conf import settings 
>>> result = send_mail('test send', 'test_send_body_text', settings.EMAIL_HOST_USER, '[email protected]') 
>>> result[0].status 
u'PENDING' 
>>> result[0].ready() 
False 
>>> result[0].failed() 
False 
>>> result[0].info 
>>> result[0].result 

(आमतौर पर 10-15 के बारे में सेकंड लेता भेजने अजवाइन ईमेल के बिना) इंतजार कर के 5 मिनट के बाद, मैं अभी भी मिलती है:

>>> result[0].status 
u'PENDING' 

और 15 मिनट के बाद अंतिम चेक (सभी में सभी 20) के बाद:

>>> result[0].status 
u'PENDING' 

तो क्या कोई इस मुद्दे के साथ मेरी मदद कर सकता है? मुझे दृढ़ विश्वास है कि यह कुछ आसान है।

ईमानदारी से आपका, सर्गेई एंजेजोव।

+0

क्या ईमेल वर्तमान बैकएंड के साथ अजवाइन के बिना आपके लिए काम भेज रहा है? –

+0

हम्म, सुनिश्चित नहीं है कि आपको सही तरीके से समझा जाता है। अगर मैं '' सेटिंग्स 'फ़ाइल में 'EMAIL_BACKEND'' पंक्ति पर टिप्पणी करता हूं, तो ईमेल भेजने का काम ठीक है, हालांकि इस तरह के दृश्य अनुरोध को पूर्ववत करने के लिए बहुत समय लगता है ... –

+0

मुझे सेलरी 4.0 का उपयोग करके भी इस समस्या का सामना करना पड़ रहा है। 0 आरसी 3 और डीजेंगो-सेलेरी-ईमेल 1.1.4। मुझे लगता है कि मैंने सत्यापित किया है कि एक एएमक्यूपी संदेश भेजा जा रहा है (RabbitMQ वेब एडमिन इंटरफ़ेस का उपयोग करके) भेजने के लिए send_mail परिणाम, लेकिन अज्ञात कारण के लिए कार्यकर्ता इसे प्राप्त नहीं कर रहा है (AMQP संदेश कतार में रहता है)। मैंने सत्यापित किया है कि कार्य ठीक से पंजीकृत हैं और प्रेषक और कार्यकर्ता दोनों एक ही ब्रोकर से बात कर रहे हैं। आगे डीबग करने के बारे में सुनिश्चित करें। –

उत्तर

4

खोल खोलने का प्रयास करें, डीजेसेलरी ईमेल बैकएंड के साथ एक ईमेल भेजने का प्रयास करें और result का निरीक्षण करें।

यह एक मानक अजवाइन AsyncResult होना चाहिए जो आपको हो रहा है कि क्या हो रहा है पर अधिक जानकारी देता है।

संपादित डॉक्स से

results will be a list of celery AsyncResult objects that you may ignore, or use to check the status of the email delivery task, or even wait for it to complete if want. You have to enable a result backend and set ignore_result to False in CELERY_EMAIL_TASK_CONFIG if you want to use these. See the Celery docs for more info.

उद्धृत करने के लिए:

आमतौर पर लंबित स्थिति कार्य निष्पादन इंतजार कर रहे हैं या नहीं जाना जाता है के लिए है।

Task is waiting for execution or unknown. Any task id that is not known is implied to be in the pending state

दोबारा जांच करके आप अपने कार्यकर्ताओं शुरू कर दिया है:

./manage.py celeryd -B 

आमतौर पर अगर अजवाइन बैकएंड करने के लिए कार्य नहीं भेज सकते हैं यह एक त्रुटि फेंकता है, लेकिन काम यह acks एक कार्यकर्ता जब तक लंबित रहता है।

+0

भी https://github.com/celery/celery/issues/1150 देखें, प्रासंगिक – DRC

+0

हो सकता है मैं देख रहा हूं कि आप किस बारे में बात कर रहे हैं। मैंने अपने प्रश्न को जानकारी फॉर्म django-shell के साथ अपडेट किया है। –

+0

बस सोच रहा है, क्या आपने अपने कर्मचारियों को शुरू किया है? :) – DRC

0

मेरे पास आपके प्रश्न पर मेरी टिप्पणी में उल्लेख के समान ही समस्या थी। मेरे मामले में कार्यकर्ता कार्यकर्ता की तुलना में एक अलग कतार में भेज रहा था। डिफ़ॉल्ट रूप से, कार्यकर्ता celery कतार सुनता है, लेकिन '-Q' विकल्प के साथ बदला जा सकता है। यह कार्य डिफ़ॉल्ट रूप से celery कतार में भी भेजेगा, हालांकि मैंने CELERY_EMAIL_TASK_CONFIG में कुछ और चीज़ों के लिए 'कतार' विकल्प सेट किया था, यह नहीं समझने से यह चीजों को तोड़ देगा। पर्यावरण परिवर्तक KOMBU_LOG_DEBUG=1 सेट करके और manage.py shell से एक ईमेल भेजने का प्रयास करके आप अपना कतार कौन सी कतार भेज रहे हैं। मैंने 'कतार' सेटिंग हटा दी और ईमेल काम करना शुरू कर दिया। मुझे नहीं पता कि आप एक ही मुद्दे का सामना कर रहे हैं लेकिन उम्मीद है कि इससे आपकी डीबगिंग में मदद मिलेगी।

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