【发布时间】:2019-06-04 22:17:08
【问题描述】:
我在 Django 2.x
中使用Django Mail Queue应用程序托管在 Heroku 上,并使用 redis 后端用于 Celery
settings.py 文件包含
##################
# CELERY STUFF
##################
BROKER_URL = os.getenv('REDIS_URL', 'redis://localhost:6379')
CELERY_RESULT_BACKEND = os.getenv('REDIS_URL', 'redis://localhost:6379')
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
#######################
# Django mail queue
#######################
MAILQUEUE_CELERY = True
MAILQUEUE_QUEUE_UP = False
并发送类似的电子邮件
new_message = MailerMessage()
new_message.subject = subject
new_message.to_address = to
new_message.from_address = from_email
new_message.content = text_content
new_message.html_content = html_content
new_message.app = 'Koober'
new_message.save()
在发送电子邮件时,它会保存在数据库中,并显示在管理页面上,但不会发送。
设置MAILQUEUE_CELERY = False和MAILQUEUE_QUEUE_UP = False发送邮件成功。
但是如果出现异常,这会导致应用程序失败。这就是为什么我想使用 Celery 在后台发送电子邮件。
app/celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'koober.settings')
app = Celery('koober')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
【问题讨论】:
-
Celery 日志中是否有错误?您是否尝试过使用 Celery 运行另一个简单的任务?
-
我在 app/celery.py 处创建了一个 celery.py 文件(已更新)。如何记录芹菜日志。我是第一次使用 Celery。
-
我认为这可能是一个问题,因为 Celery 应该作为一个单独的进程运行。阅读如何在另一个终端选项卡中运行它docs.celeryproject.org/en/latest/getting-started/…
-
您实际上是在发送排队的消息吗?
python manage.py send_queued_messages? -
@BurhanKhalid 这行得通。在 heroku
heroku run python manage.py send_queued_messaged中执行时。那么,我需要以 Cron 的身份运行命令吗?
标签: django celery django-celery