RuntimeError:在应用程序上下文之外工作。在我的烧瓶应用程序中

时间:2019-12-03 15:58:26

标签: python python-3.x flask scheduler flask-mail

我正在尝试使用此功能安排从我的烧瓶应用程序发送电子邮件:

from apscheduler.scheduler import Scheduler
scheduler = Scheduler()
scheduler.start()

def email_job_scheduling():
    to="abdellah.ala@gmail.com"
    subject="summary projects"
    message="your summary projects"
    send_email(to,subject,message)

scheduler.add_cron_job(email_job_scheduling, day_of_week='tue', hour=12, minute=55)

这是我在文件 init .py中声明应用程序的方式,是否存在任何关系,或者必须在此文件中添加计划功能。

login_manager = LoginManager()
db = SQLAlchemy()
mail = Mail()

def create_app(config_name):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object(app_config[config_name])
    app.config.from_pyfile('config.py')
    app.permanent_session_lifetime = timedelta(minutes=10)

    db.init_app(app)
    mail.init_app(app)
    login_manager.init_app(app)
    return app

但是我收到此错误,

  

调试模式:关闭*在http://127.0.0.1:5000/上运行(按CTRL + C   退出)作业“ email_job_scheduling(触发:cron [day_of_week ='wed',   hour ='9',minutes = '57'],下次执行:2019-12-11 09:57:00)“提出了   异常回溯(最近一次呼叫最近):文件   “ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/apscheduler/scheduler.py”,   第512行,在_run_job中       retval = job.func(* job.args,** job.kwargs)文件“ /home/abdellah/Documents/SUPPORT-STS/project/app/admin/views.py”,   第29行,在email_job_scheduling中       send_email(收件人,主题,消息)文件“ /home/abdellah/Documents/SUPPORT-STS/project/app/emails.py”,   第11行,在send_email中       mail.send(msg)文件“ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/flask_mail.py”,   发送中的第491行       使用self.connect()作为连接:文件“ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/flask_mail.py”,   连接线508       返回Connection(app.extensions ['mail'])文件“ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/werkzeug/local.py”,   第348行,位于 getattr       返回getattr(self._get_current_object(),名称)文件“ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/werkzeug/local.py”,   _get_current_object中的第307行       返回self .__ local()文件“ /home/abdellah/Documents/venv/lib64/python3.6/site-packages/flask/globals.py”,   _find_app中的第52行       引发RuntimeError(_app_ctx_err_msg)RuntimeError:在应用程序上下文之外工作。

     

这通常意味着您尝试使用   需要以某种方式与当前应用程序对象接口。   要解决此问题,请使用app.app_context()设置应用程序上下文。   有关更多信息,请参见文档。

1 个答案:

答案 0 :(得分:0)

是,如果未指定应用程序上下文,则应创建它。 这是因为有必要在Flask应用程序中定义所有必需的资源。 该文档完美地说明了在哪种情况下以及如何在Flask中使用上下文应用程序。

https://flask.palletsprojects.com/en/1.0.x/appcontext/

如果您发布更多代码,我可能会更有帮助。

我将尝试通过以下方式找到解决方案:

from flask import g

def email_job_scheduling():
    a = "abdellah.ala@gmail.com"
    subject = "summary projects"
    message = "your summary projects"
    send_email (to, subject, message)

def get_scheduler():
    if "scheduler" is not in g:
    g.scheduler = Scheduler()
    g.scheduler.start()
    returns g.scheduler

with app.app_context(): #add the necessary resources
    scheduler = get_scheduler()
    #add another code if you need to set another resource

#This piece of code I think is in the main
scheduler.add_cron_job (email_job_scheduling, day_of_week = 'tue', now = 12, minute = 55)