MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

flacon 0.10 mongo fonctionnant en dehors du contexte de l'application

Pour comprendre cette erreur, vous devez comprendre le contexte de l'application .

Il est tout à fait possible pour quelqu'un d'écrire plusieurs applications Flask qui traitent toutes leurs requêtes dans le même processus. La documentation donne l'exemple suivant...

from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend

application = DispatcherMiddleware(frontend, {
    '/backend':     backend
})

Gardez à l'esprit que dans ce cas, l'application frontale peut utiliser différentes configurations Mongo, mais utiliser exactement le même objet d'extension Mongo. Pour cette raison, Flask ne peut pas supposer quelle est l'application "actuelle" lorsque vous exécutez un script. Par conséquent, des éléments tels que url_for() , ou de nombreuses méthodes sur des extensions telles que l'extension MongoDB, doivent savoir quelle application est l'application "actuelle" avant de faire quoi que ce soit.

Par conséquent, chaque fois que vous essayez d'utiliser Flask ou des fonctions d'extension pour faire autre chose que de configurer les applications elles-mêmes (avec des valeurs de configuration, etc.), vous devez indiquer explicitement à Flask quelle est l'application actuelle à attribuer au contexte d'application .

Les docs donnent un moyen de le faire..

# Be careful about recursive imports here
from . import app
from .extention import mongo

@sched.interval_schedule(minutes=1)
def long_running_queries():
    with app.app_context():
        mongo.db.command("aggregate", "collection", pipeline = "some query" )

Donc, vous devrez créer l'objet app lui-même, puis utiliser le with app.app_context() ligne. Dans cette déclaration with, tous vos appels (tels que ceux vers votre extension Mongo) devraient fonctionner. Notez que vous n'avez rien à faire dans une vue, car Flask fera automatiquement tout cela dans le cadre de la gestion d'une requête.