我无法让我的 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)
暂无答案!
目前还没有任何答案,快来回答吧!