Flask 芹菜与烧瓶:应用程序未在db实例上注册,且没有绑定到当前上下文的应用程序

Flask 芹菜与烧瓶:应用程序未在db实例上注册,且没有绑定到当前上下文的应用程序,flask,celery,Flask,Celery,我正在尝试使用芹菜向我的烧瓶应用程序添加一些背景任务。我将blueprint与我的烧瓶应用程序一起使用,如下所示: db = SQLAlchemy() def create_app(): app = Flask(__name__) app.config.from_object('config') db.init_app(app) from .main import main as main_blueprint app.register_bluepri

我正在尝试使用芹菜向我的烧瓶应用程序添加一些背景任务。我将blueprint与我的烧瓶应用程序一起使用,如下所示:

db = SQLAlchemy()


def create_app():
    app = Flask(__name__)
    app.config.from_object('config')
    db.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')

    return app
app = create_app()
app.run(port=7000, debug=True, threaded=True)
我有这样的
run.py

db = SQLAlchemy()


def create_app():
    app = Flask(__name__)
    app.config.from_object('config')
    db.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')

    return app
app = create_app()
app.run(port=7000, debug=True, threaded=True)
然后我有一个单独的文件,其中包含一些任务:

celery = Celery(__name__, broker=CELERY_BROKER_URL)


@celery.task
def send_async_sms(to, msg):
    app = current_app._get_current_object()
    with app.app_context():
        time.sleep(12)
        print "Sending to {0}: {1}".format(to, msg)
如果没有应用程序上下文的两行代码,一切都会正常进行。但添加它们会导致以下问题:

 ERROR/MainProcess] Task app.notify.send_async_sms[0d535fc4-7465-470e-9204-548ecca2c6e0] raised unexpected: RuntimeError('working outside of application context',)

我做错了什么?

当前的应用程序取决于现有的应用程序上下文。将其替换为
创建应用程序
,您应该能够在新的上下文中创建和工作,而不会出现问题。
当前的应用程序
取决于现有的应用程序上下文。将其替换为
创建应用程序
,您应该能够在新的上下文中创建和工作,而不会出现问题。
当前的应用程序
取决于现有的应用程序上下文。将其替换为
create_app
,您应该能够在新环境中创建和工作,而不会出现问题。