9

非同期メール送信の問題を解決するのに少し行き詰まりました。セロリと django データベースをバックエンドとして使用したいと思います。今のところ、このキュー管理ツールを使用したいのは電子メールだけなので、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 SMTPを使用しています:

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

djceleryアプリとアプリの両方で移行を実行しましたkomby。そして今、デフォルトの djangosend_mailコア メソッドを使用すると、電子メールは送信されません。

オプションを削除EMAIL_BACKENDすると、メール送信は機能しますが、非常に遅くなります。スピードがなければ、そもそもこのプロセスをキューに入れようとは思わないでしょう。

データベースのバックエンドとしてMySQLデータベースを使用していますが、タスクの追加中にエラーログファイルに何も表示されなかったので、その部分は問題ないと思います。私には、経験豊富なセロリやdjceleryユーザーが簡単に見つけることができる基本的なインストールまたは構成の部分を見逃しているように思えますが、私のような初心者は見逃していた可能性があります。

UPDATE 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,    'hornswf@gmail.com')
>>> result[0].status
u'PENDING'
>>> result[0].ready()
False
>>> result[0].failed()
False
>>> result[0].info
>>> result[0].result

5分間待った後(セロリのメール送信なしでは、通常約10〜15秒かかります)、まだ取得します:

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

最後のチェックから15分後(全部で20分):

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

誰でもこの問題で私を助けることができますか? 私はそれが単純なことだと強く信じています。

敬具、セルゲイ・アガネゾフ。

4

2 に答える 2

0

あなたの質問に対する私のコメントで述べたように、私は同様の問題を抱えていました。私の場合、タスクは、ワーカーがリッスンしていたものとは異なるキューに送信されていました。デフォルトでは、ワーカーはceleryキューをリッスンしますが、'-Q' オプションで変更できます。タスクはデフォルトでceleryキューにも送信されますが、「キュー」オプションを別のCELERY_EMAIL_TASK_CONFIGものに設定していましたが、これが問題を引き起こすことに気づいていませんでした。環境変数KOMBU_LOG_DEBUG=1を設定し、manage.py シェルからメールを送信することで、タスクが送信しているキューをデバッグできます。「キュー」設定を削除すると、メールが機能し始めました。同じ問題が発生しているかどうかはわかりませんが、デバッグに役立つことを願っています。

于 2016-07-15T04:33:06.220 に答える