MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

boccetta 0.10 mongo che funziona al di fuori del contesto dell'applicazione

Per comprendere questo errore, è necessario comprendere il contesto dell'applicazione .

È del tutto possibile che qualcuno scriva più applicazioni Flask che gestiscano tutte le loro richieste nello stesso processo. I documenti forniscono il seguente esempio...

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

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

Tieni presente che in questo caso, l'app frontend potrebbe utilizzare diverse configurazioni di Mongo, ma utilizzare esattamente lo stesso oggetto di estensione Mongo. Per questo motivo, Flask non può presumere quale sia l'app "corrente" quando esegui uno script. Pertanto, cose come url_for() , o molti dei metodi su estensioni come l'estensione MongoDB, devono sapere quale applicazione è "corrente" prima di fare qualsiasi cosa.

Pertanto, ogni volta che si tenta di utilizzare Flask o funzioni di estensione per fare qualcosa di diverso dalla configurazione delle applicazioni stesse (con valori di configurazione, ecc.), è necessario dire esplicitamente a Flask qual è l'app corrente da assegnare a contesto dell'applicazione .

I documenti forniscono un modo per farlo..

# 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" )

Quindi, dovrai creare l'oggetto app stesso, quindi utilizzare with app.app_context() linea. All'interno di questa dichiarazione, tutte le tue chiamate (come quelle al tuo interno Mongo) dovrebbero funzionare. Tieni presente che non è necessario eseguire nulla di tutto ciò in una vista perché Flask eseguirà automaticamente tutto ciò come parte della gestione di una richiesta.