【问题标题】:Flask-Mail and Redis Queue library integration giving errorFlask-Mail 和 Redis 队列库集成给出错误
【发布时间】:2013-09-06 00:39:35
【问题描述】:

我正在使用 Flask-Mail 扩展来启用应用程序中的邮件发送。我无法让 celery 与烧瓶一起使用,所以我查找了其他一些库并找到了 Redis Queue

代码:

     from flask.ext.mail import Mail,Message
     from rq import Queue

     mail = Mail() # mail.init_app(app) is done in top app.py

     q = Queue()

     @mod.route('/test')
     def m11():
         msg = Message("Signup Successfull",
                  recipients=['abc@gmail.com'])
         msg.body = "Hello there, Welcome!"
         q.enqueue(mail.send, msg)
         return 'done'

当我运行代码时,rqworker 中的邮件发送失败,出现以下错误:

    17:04:49: *** Listening on default...
    17:06:08: default: flaskext.mail.send(<flaskext.mail.message.Message object at         
                       0x1027a9750>) (8c86f0f9-ae76-4297-bf17-a171a67f1b44)
    17:06:08: 'module' object has no attribute 'send'
    17:06:08: Moving job to failed queue.

这个错误的原因是什么?

编辑:没有属性 send 是因为 send 是一个实例方法。

现在有不同的问题。我收到邮件对象没有任何属性应用程序的错误。我猜 rq 的新进程不知道我的烧瓶应用程序,因此不知道错误。 如何解决这个问题?

【问题讨论】:

    标签: python redis flask


    【解决方案1】:

    您正在尝试将邮件对象实例的发送方法加入队列,而 RQ 无法将实例方法加入队列。如果您查看页面底部的文档,它会提到:

    http://python-rq.org/docs/

    尝试定义另一种方法并以这种方式发送邮件。比如……

    from flask.ext.mail import Mail,Message
    from rq import Queue
    
    mail = Mail()
    q = Queue()
    
    def queue_mail(msg):
        mail.send(msg)
    
    @mod.route('/test')
    def m11():
        msg = Message("Signup Successfull",
                      recipients=['abc@gmail.com'])
        msg.body = "Hello there, Welcome!"
        q.enqueue(queue_mail, msg)
        return 'done'
    

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 2020-06-08
      • 2020-02-22
      • 2022-01-23
      • 1970-01-01
      • 2017-03-14
      • 2014-11-04
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多