我的项目结构类似于overholt和fbone示例。我可以很好地发送所有蓝图的电子邮件,但很难发送到外面。例如。来自cron脚本或芹菜任务。
我一直收到错误working outside of application context
应用程序/ factory.py
from flask import Flask
from .extensions import mail
def create_app(package_name, package_path, settings_override=None,
register_security_blueprint=True):
app = Flask(package_name, instance_relative_config=True)
mail.init_app(app)
register_blueprints(app, package_name, package_path)
app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app)
return app
应用程序/ extensions.py
from flask_mail import Mail
mail = Mail()
应用程序/前端/ admin.py
bp = Blueprint('admin', __name__, url_prefix='/admin', static_folder='static')
@bp.route('/')
def admin():
msg = Message(......)
mail.send(msg)
直到这里的一切都很好。现在我在app中有一个单独的模块,它有一些现在失败的cron脚本。
应用程序/ cron的/ alerts.py
from ..extensions import mail
from flask.ext.mail import Message
def alert():
msg = Message('asdfasdf', sender='hello@example.com', recipients=['hello@example.com'])
msg.body = 'hello'
mail.send(msg)
产生错误。我怎么能绕过这个?
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
答案 0 :(得分:1)
您需要使用http://dev.mysql.com/doc/refman/5.1/en/pluggable-storage-overview.html:
from flask_mail import Mail
mail = Mail(app)
答案 1 :(得分:-1)
我建议去芹菜。对于上下文问题,我在下面找到了我的解决方案。
看看这个:
Miguel Grinberg's Blogpost on celery
或者如果您在应用程序中使用工厂模式:
第二个是某种进一步/扩展阅读。 他们俩都帮助了我很多。 (第二个也解决了我的背景问题)