Flask 芹菜与烧瓶:应用程序未在db实例上注册,且没有绑定到当前上下文的应用程序
我正在尝试使用芹菜向我的烧瓶应用程序添加一些背景任务。我将blueprint与我的烧瓶应用程序一起使用,如下所示: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
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
,您应该能够在新环境中创建和工作,而不会出现问题。