flask工厂模式与rq和pymongo:runtimeerror:在应用程序上下文之外工作

py49o6xq  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(251)

我无法让我的 flask 工厂模式下的 flask \u redis和rq工作。我希望能够作为后台任务的一部分写入mongodb,但收到以下错误:
runtimeerror:在应用程序上下文之外工作。
这通常意味着您试图使用以某种方式与当前应用程序对象接口所需的功能。要解决此问题,请使用app.app\u context()设置应用程序上下文。有关更多信息,请参阅文档。
如果我排除了write to db的要求,一切都正常。
参见下面的代码。谢谢你的帮助!
运行.py

from app import create_app

app = create_app("config.DevConfig")

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

应用程序/\uuu初始化\uuuuuuuuuuuuuuy.py

from flask import Flask
from flask_redis import FlaskRedis
from rq import Queue
from flask_pymongo import PyMongo

mongo = PyMongo()
r = FlaskRedis()
q = Queue(connection=r)

from app.views import api

def create_app(config):
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object(config)
    mongo.init_app(app)
    r.init_app(app)
    with app.app_context():
        app.register_blueprint(api)

    return app

应用程序/视图.py

from flask import Blueprint
from app import q
from app.tasks import task
from flask import render_template, request

api = Blueprint('apit', __name__)

@api.route("/add-task", methods=["GET"])
def add_task():

    if request.args:
        url = request.args.get("url")
        complete_task = q.enqueue(task, url) 

    return {'message': 'complete'}

应用程序/任务.py

from urllib import request
from bs4 import BeautifulSoup
import lxml
from app import mongo
from flask import current_app

def task(url):

    r = request.urlopen(url)
    soup = BeautifulSoup(r.read().decode(), "lxml")

    task_output = foo

    with current_app.app_context():
        mongo.db.jobs.insert_one(task_output)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题