RQ Python "Работа вне контекста приложения" - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь использовать Redis & RQ, чтобы установить задачу отправки электронного письма, однако «RQ Worker» возвращает ошибку времени выполнения, хотя функция отправки электронных писем за пределы q.enqueue работает нормально.

  • app / rout.py

    routes = Blueprint("routes", __name__)
    r = Redis()
    q = Queue(connection=r)
    
    def sendEmail_task(recipient, message):
        msg = Message("Test Email", sender=("Me", "shawkyelshazly2@gmail.com"), 
        recipients=[recipient])
        msg.body = message
        msg.send(mail)
    
    @routes.route("/send_email", methods=["POST", "GET"])
    def send_mail():
        if request.method == "POST":
            recipient = request.form.get('email')
            message = request.form.get('message')
            job = q.enqueue(sendEmail_task, recipient, message)
            return redirect(url_for("routes.email_sent"))
    
        return render_template("send_email.html")
    
  • app / __ init __. Py

    mail = Mail()
    
    def create_app(config_class = Config):
        app = Flask(__name__)
        from app.routes import routes
        app.register_blueprint(routes)    
        app.config.from_object(Config)
    
        with app.app_context():
            mail.init_app(app)
    
        return app
    
  • run.py

Который находится вне папки приложения

    from app import create_app

    app = create_app()

    if __name__ == '__main__':
        app.run(debug=True)

1 Ответ

1 голос
/ 11 ноября 2019

Возможно, вам не хватает app.app_context().push(). Мега-учебник Flask делает это как this , но я сделал это внутри задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...